UE4 服务器同步

389 篇文章 15 订阅
29 篇文章 0 订阅

UE4 服务器同步

Actor 的同步

 

根据“网络连接概述”中所述,Actor 是实现同步的主要推动者。服务器将保留一份 Actor 列表并定期更新客户端, 以便客户端保留每个 Actor (那些需要被同步的Actor)的近似复本。

Actor 主要通过两种方式进行更新:

  • 属性更新

  • RPC (远程过程调用)。

属性更新和 RPC 的主要区别在于,属性可以在发生变化时随时自动更新,而 RPC 只能在被执行时获得调用更新。

其中,最具代表性的一类应当复制的属性就是 Actor 的健康值。每当健康值发生变化时,您通常都希望告知客户端。 如果健康值没有变化,则不会发送任何数据。这样做很有效率。但需要记住的是,即使这个属性没有变化(因此不消耗任何带宽), 它仍然会消耗 CPU 资源来判断这个值是否发生变化。因此,这适合那些经常变化的属性。

RPC 的例子包括:让所有客户端在某个位置看到同一场爆炸。您可以以位置和半径为参数的 RPC 函数,同时在每次发生爆炸时调用它。 您也可以将此存储为一组属性,通过同步的方式将其传达给客户端,但这种做法会损失一些效率,因为爆炸出现的频繁度也许不会高得有必要将它们作为属性。

 

变量同步(Replication)

同步UObject引用,通过replicated修饰声明
class ENGINE_API AActor : public UObject { UPROPERTY( replicated ) AActor * Owner; };

 函数同步(RPC)

 在函数声明时使用ServerClient, or NetMulticast 关键字修饰UFUNCTION

 

客户端调用,服务器执行
UFUNCTION( Client ); void ClientRPCFunction();


服务器调用,客户端执行
UFUNCTION( Server );
void ServerRPCFunction();
服务器调用,在服务器和所有客户端执行
UFUNCTION( NetMulticast ); void MulticastRPCFunction();


组建同步

CharacterMovement = ObjectInitializer.CreateDefaultSubobject<UMovementComp_Character>(this, TEXT("CharMoveComp")); if (CharacterMovement) { CharacterMovement->UpdatedComponent = CapsuleComponent; CharacterMovement->GetNavAgentProperties()->bCanJump = true; CharacterMovement->GetNavAgentProperties()->bCanWalk = true; CharacterMovement->SetJumpAllowed(true); CharacterMovement->SetNetAddressable(); // Make DSO components net addressable CharacterMovement->SetIsReplicated(true); // Enable replication by default }

蓝图中组建同步

components_checkbox.png

 
 

BluePrintActor同步

您可以设置是否复制Actor,通过下方的 Replication (复制)部分下的 Defaults (默认)选项卡来完成。

1_1_Replicates.png

BluePrint变量同步

您可以如下图中这样,通过启用变量的 细节 面板的勾选框来启用对 Health (生命值)的变量 Replication (复制)。

1_3_Rep_Variables.png

 

BluePrint事件同步

类似的在事件面板中也有事件同步或者广播的设置

 

分类:  UE4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值