UE4属性条件复制

引言

UE4中属性被注册进行复制后,将再也无法再取消注册。那么,如何对属性复制过程进行更细化的控制呢?

DOREPLIFETIME_CONDITION

可以通过传入条件枚举来设置对应的属性复制功能。

使用示例:

 

void UTest::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);
	DOREPLIFETIME_CONDITION(UTest, m_arrayItem,     COND_InitialOnly);
}

 

条件枚举说明:

 

 

条件

 

说明

 

COND_InitialOnly

 

该属性仅在初始数据组尝试发送

 

COND_OwnerOnly

 

该属性仅发送至 actor 的所有者

 

COND_SkipOwner

 

该属性将发送至除所有者之外的每个连接

 

COND_SimulatedOnly

 

该属性仅发送至模拟 actor

 

COND_AutonomousOnly

 

该属性仅发送给自治 actor

 

COND_SimulatedOrPhysics

 

该属性将发送至模拟或 bRepPhysics actor

 

COND_InitialOrOwner

 

该属性将发送初始数据包,或者发送至 actor 所有者

 

COND_Custom

 

该属性没有特定条件,但需要通过 SetCustomIsActiveOverride 得到开启/关闭能力

 

到目前为止,我们已经讨论了基于已知状态的条件。这可以让引擎方便的做出必要的优化,同时让您对属性复制拥有足够的控制。

DOREPLIFETIME_ACTIVE_OVERRIDE

可以让您进行全面控制,利用您想要的任何定制条件来决定何时复制/不复制某个属性。需要注意的是,这种控制需针对每个 actor(而不是每条连接)逐一进行。换句话说,如果在定制条件中使用一个可根据连接而发生变化的状态,会存在一定的安全风险。具体示例如下。

void AActor::PreReplication( IRepChangedPropertyTracker & ChangedPropertyTracker )
 {     
         DOREPLIFETIME_ACTIVE_OVERRIDE( AActor, ReplicatedMovement, bReplicateMovement ); 
 }

 

现在 ReplicatedMovement 属性只会在 bReplicateMovement 为 true 时复制。

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值