UE4学习案例——多人网络中同步信息的方法

一、前言

        截至本篇文章发布时使用的UE4版本为4.25.4,这里所说的同步的信息是指用户的信息,如分数,这样的数据需要显示在每个客户端。

二、实现

2.1、官方案例的方法

        我在学习UE4官方案例《多人枪战游戏》时看到的其思路时这样的,首先,在玩家Gunslinger_BP蓝图的收到伤害事件Event AnyDamage中直接修改PlayerState的玩家分数,如图2.1所示,其中PlayerState是UE4系统自动维护其网络状态,会确保执行其中的同步方法,

图2.1

PlayerState会自动执行同步信息到其他客户端,要确保想要的信息(分数)被同步到其他客户端,还需设置该信息(分数)为Replicted,如图2.2所示,设置为Replicated模式之后,其实所有

图2.2

客户端上该PlayerState都已经同步了这个值了,后面只需要在UI上刷新该值即可,如图2.3所示

图2.3

设置UI上的Score这个Text控件的Text绑定Get Score Text 0方法,在这个方法里实现获取属于当前客户端的PlayerState的分数值。这样的实现逻辑下非常影响性能,因为图2.3绑定Text的Get Score Text 0方法是每帧都刷新,有没有方法可以不用每帧去刷新PlayerState的分数值而获取玩家的分数呢。当然有,见下面的方法。

2.2、广播的方法

        同样在Gunslinger_BP蓝图的收到伤害事件Event AnyDamage中调用PlayerState的方法或事件,但这里我们调用另外一个事件AddScore,设置其Replicates为Multicast,如图2.4所示,并且

图2.4

将2.1中PlayerState的PlayerScore由Replicate设置为None,也即该变量不自动复制。在图2.4中定义了一个变量MyScoreRow,这个变量也即显示分数的UI条,在PlayerState的其他方法或事件中可以创建并获取。

        以上即让所有客户端该PlayerState都执行AddScore方法,即完成在所有客户端上该PlayerState的分数增加。如果,没有将PlayerState的PlayerScore的Replication设置为None,会出现属于PlayerScore的客户端上分数多加了一次。

三、总结

3.1、尽量不要使用绑定UI上的Text方法实现UI信息更新,因为这个方法每帧都刷新,如果有复制而费事的操作会造成系统运行速度下降;

3.2、牢记PlayerState的实现原理,这样可以充分利用。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值