查看: 543|回复: 9

[游戏性指南] 【条件属性复制 | Unreal Engine】

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2016-6-27 17:00:10 | 显示全部楼层 |阅读模式



当属性被注册进行复制后,您将无法再取消注册(涉及到生存期这一话题)。之所以会这样,是因为我们要预制尽可能多的信息,以便针对同一组属性将某一工作分担给多个连接。这样可以节省大量的计算时间。

那么,如何对属性复制过程进行更细化的控制呢?这时就需要用到条件属性了。

默认情况下,每个复制属性都有一个内置条件:如果不发生变化就不会进行复制。

为了加强对属性复制的控制,您可以使用一个特意的宏来添加附加条件。

这个宏被称为 DOREPLIFETIME_CONDITION。它的应用示例如下:

void AActor::GetLifetimeReplicatedProps( TArray FLifetimeProperty   OutLifetimeProps ) const{    DOREPLIFETIME_CONDITION( AActor, ReplicatedMovement, COND_SimulatedOnly );}
传递给条件宏的 COND_SimulatedOnly 标志甚至可以在考虑复制属性前执行一次额外检查。这时,它只会复制到拥有此 actor 模拟复本的客户端。

这样做的一个最明显的好处在于节省带宽;因为我们确信拥有此 actor 的自治代理版本的客户端无需了解这个属性(例如,该客户端为了进行预测而直接设置了这一属性)。另一个好处就是对于不接收该属性的客户端而言,服务器无需干涉这个客户端的本地复本。

下面,让我们快速浏览一下目前支持的条件,它们会在 Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 的 ELifetimeCondition 枚举中指定:


条件
说明

COND_InitialOnly该属性仅在初始数据组尝试发送COND_OwnerOnly该属性仅发送至 actor 的所有者COND_SkipOwner该属性将发送至除所有者之外的每个连接COND_SimulatedOnly该属性仅发送至模拟 actorCOND_AutonomousOnly该属性仅发送给自治 actorCOND_SimulatedOrPhysics该属性将发送至模拟或 bRepPhysics actorCOND_InitialOrOwner该属性将发送初始数据包,或者发送至 actor 所有者COND_Custom该属性没有特定条件,但需要通过 SetCustomIsActiveOverride 得到开启/关闭能力
到目前为止,我们已经讨论了基于已知状态的条件。这可以让引擎方便的做出必要的优化,同时让您对属性复制拥有足够的控制。

如果这样的控制力还不够,那该怎么办?关于这个话题,还有一件事需要讨论。有一个名叫 DOREPLIFETIME_ACTIVE_OVERRIDE 的宏可以让您进行全面控制,利用您想要的任何定制条件来决定何时复制/不复制某个属性。需要注意的是,这种控制需针对每个 actor(而不是每条连接)逐一进行。换句话说,如果在定制条件中使用一个可根据连接而发生变化的状态,会存在一定的安全风险。具体示例如下。

void AActor::PreReplication( IRepChangedPropertyTracker  ChangedPropertyTracker ){    DOREPLIFETIME_ACTIVE_OVERRIDE( AActor, ReplicatedMovement, bReplicateMovement );}
现在 ReplicatedMovement 属性只会在 bReplicateMovement 为 true 时复制。

为何不一直使用这个宏?主要有两个原因:

如果定制条件的值变化太大,这种做法会降低执行速度。

您不能使用根据连接而变化的条件(此时不检查 RemoteRole)。

属性复制条件可以很好的实现控制力与性能之间的平衡。它们可以使引擎以更快的速度针对多条连接检查并发送属性,同时让程序员对复制属性的方式和时机进行精细控制。
回复

使用道具 举报

0

主题

839

帖子

2742

积分

vip会员

Rank: 1

积分
2742
发表于 2016-7-2 20:26:01 来自手机 | 显示全部楼层
要查看本帖隐藏内容请回复
回复 支持 反对

使用道具 举报

0

主题

838

帖子

2721

积分

vip会员

Rank: 1

积分
2721
发表于 2016-7-4 02:59:59 | 显示全部楼层
嗯,这个资源特别的好啊,赶紧下来收藏起来。
回复 支持 反对

使用道具 举报

0

主题

887

帖子

2898

积分

vip会员

Rank: 1

积分
2898
发表于 2016-7-4 12:45:33 来自手机 | 显示全部楼层
学习了,感谢分享
回复 支持 反对

使用道具 举报

wxx0136 该用户已被删除
发表于 2016-7-7 00:46:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

847

帖子

2790

积分

vip会员

Rank: 1

积分
2790
发表于 2016-7-11 21:45:23 来自手机 | 显示全部楼层
加油摸摸大,感谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

863

帖子

2819

积分

vip会员

Rank: 1

积分
2819
发表于 2016-7-21 23:26:42 | 显示全部楼层
看看贵不贵,不贵就下
回复 支持 反对

使用道具 举报

小魔女 该用户已被删除
发表于 2016-7-24 07:16:35 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

843

帖子

2793

积分

vip会员

Rank: 1

积分
2793
发表于 2016-7-26 11:36:10 来自手机 | 显示全部楼层
我吭哧瘪肚 终于下载下来了,但是不会用- -
回复 支持 反对

使用道具 举报

0

主题

851

帖子

2784

积分

vip会员

Rank: 1

积分
2784
发表于 2016-7-26 19:55:57 | 显示全部楼层
好东西,所噶
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部