6.1状态同步指的是同步状态信息的重要性分析

6.1状态同步指的是同步状态信息的重要性分析

第六章帧同步和状态同步 6.1 状态同步

状态同步是指同步状态信息,比如角色需要做的动作,角色的位置坐标和旋转等,发送给服务器,服务器广播。这种同步方式会将核心逻辑判断交给服务端,否则会导致延迟过大。例如:

如果服务器只是作为转发器,那么玩家在同步释放技能的状态时3D植物,很可能因为网络原因其他主机很晚才收到材质材料,导致延迟很高,如果释放技能的状态只是同步到服务器。服务器收到后进行一定的判断和计算,然后将处理后的状态同步给所有玩家。这样会在一定程度上保持所有玩家的同步,但是这样也会导致响应慢等等问题。所以状态同步一般不适合实时度比较高的pvp游戏。

影音先锋p2p网络引擎_网络游戏引擎_webgl 网络引擎

6.1.1 跟随算法

以上是服务端处理完后广播的方法。另一种方法是服务器仍然是一个转发工具。如果网络不好,必然会导致频繁传送,于是聪明的程序大师们想到了一个办法。即如果获得的状态和客户端的状态有差距,对象会以一定的速度到达这个状态。只要同步频率足够高,误差可以忽略不计,但仔细分析网络游戏引擎,这比直接态同步误差要大。所以人们又提到了预测算法。

6.1.2 预测算法

影音先锋p2p网络引擎_webgl 网络引擎_网络游戏引擎

在一定的规律性条件下,比如坦克匀速运动,或者匀速加速,我们可以预测坦克接下来的位置,我们提前让坦克走到预测的位置,但是这样也会带来一个问题。也就是玩家控制的东西一般是没有规则的,所以如果玩家中途停下来,你会看到一个神奇的现象,一辆坦克在前进,无声无息地后退,预测算法也比较复杂。

两种算法各有优势,具体情况具体分析。

6.2 帧同步

webgl 网络引擎_网络游戏引擎_影音先锋p2p网络引擎

游戏中同步的是玩家的操作指令,操作指令包括当前帧索引。大致流程是客户端上传操作到服务器,服务器收到后不计算游戏行为,而是转发给所有客户端。帧同步实际上是一种指令同步。

6.2.1 命令同步

玩家只同步指令信息,相同的输入+相同的时序=相同的输出。

网络游戏引擎_webgl 网络引擎_影音先锋p2p网络引擎

6.2.2 同步帧

帧同步帧和统一帧是两个概念。在 unity 中,我们说 Update 函数每帧调用一次。我们还说 Update 调用的速度取决于所使用的设备。如果某个设备更新速度较慢,则没有问题。没有办法保证时序一致,这些偏差会导致整个游戏的不同客户端之间存在巨大的差距,所以我们引入一个概念叫同步帧。由于帧同步的特性,客户端的逻辑实现和表现实现必须完全分离。Unity中有些方法接口(如Invoke、Update、动画系统等)是不可靠的,需要自己实现一套物理引擎和数学库,将逻辑和性能分离。这样一来网络游戏引擎,即使Unity'

6.3 帧同步与状态同步的比较

网络游戏引擎_影音先锋p2p网络引擎_webgl 网络引擎