|
概述
每个 actor 都保有一份属性列表,而每个属性都可以被标记,以表示复制到客户端。当服务器端的变量值发生改变时,服务器将向客户端发送更新后的值。而客户端的变量值也可能发生变化 - 这时会使用新值去覆盖原有值。属性更新只能来自于服务器,客户端永远不会向服务器发送属性更新。
有些属性是默认复制(方位、旋转、所有者等)。这些属性通常被架构用来完成基本的多人游戏工作。在此基础上,您可以根据需要标记更多的属性进行复制。
Actor 属性复制是一个可靠过程。也就是说,客户端版本的 Actor 属性将最终反映服务器上的值 - 但可能忽略某些单独的属性值变化。
设置属性用于复制
要复制一个属性,您需要做一些准备工作:在 actor 类标头中的属性定义部分,您需要确保将 replicated 关键字作为 UPROPERTY 声明的一个参数:
class ENGINE_API AActor : public UObject{ UPROPERTY( replicated ) AActor * Owner;};
在 actor 类的实现中,您需要实现 GetLifetimeReplicatedProps 函数:
void AActor::GetLifetimeReplicatedProps( TArray FLifetimeProperty OutLifetimeProps ) const{ DOREPLIFETIME( AActor, Owner );}
在 actor 的构造函数中,确保将 bReplicates 标志设置为 true:
AActor::AActor( const class FPostConstructInitializeProperties PCIP ) :Super( PCIP ){ bReplicates = true;}
差不多就是这样。现在,成员变量 Owner 将同步到所有连接的客户端,并应用于当前实例化的此 actor 类型的所有复本(此时为基本 actor 类)。
相关页面
复制对象引用
条件属性复制
RPC
|
|