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

Posted 凯尔八阿哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的实现原理,这样可以充分利用。

以上是关于UE4学习案例——多人网络中同步信息的方法的主要内容,如果未能解决你的问题,请参考以下文章

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

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

UE4 Atmospheric Fog组件问题记录(未解决)

UE4 Atmospheric Fog组件问题记录(未解决)

深入浅出UE4网络

Source引擎多人模式网络同步模型