【Unity游戏】 帧同步和状态同步

什么是帧同步和状态同步?

多人游戏中客户端之间通信,多以同步多方状态为主要目标。实现这个目标主要有两个技术:帧同步,状态同步

状态同步:客户端发送游戏动作到服务器,服务器收到后,计算游戏行为的结果,把结果广播给所有客户端。客户端收到结果后显示。(回合制游戏可采用这种方式)

帧同步:客户端发送游戏动作到服务器,服务器把动作广播给所有客户端,客户端根据游戏动作来做运算和显示。(红警/星际争霸等连线进行双打游戏,都是这种方式)。这种方式客户端做主要算力。服务器只做转发。

1.状态同步和帧同步的主要区别?

主要的区别在于游戏核心逻辑交互计算写在哪?
状态同步主要逻辑在服务器,客户端更像是服务器数据的表现层。整个游戏的运行开始,交互。角色属性都是服务器传给客户端。
帧同步主要逻辑在客户端。角色移动,攻击,检测,技能等交互计算都在客户端,服务器只是做简单的广播。

一.帧同步技术详解

相同输入 + 相同的时机 = 相同的显示; 各个客户端的运算要绝对一致,不能依赖本地时间或本地随机数等等,一切要以网络来的操作数据为准。

一般帧同步系统中,会有一个Replay Server负责广播所有客户端的数据。为让客户端持续运行,不卡住,需要定时下发一个"网络帧"数据驱动各个客户端。(因客户端已放弃本地时间和本地的循环驱动,所有这些"网络帧"就必不可少。这些网络帧大部分为空,只有当玩家有输入,才会把操作数据填入网络帧数据包中。)

一般来说,多数游戏客户端引擎都会定时调用一个接口函数,这个函数由用户填写内容,用于控制游戏中各种需要显示的内容。例如Unity中Update().这类函数通常会在每帧画面渲染前调用,当用户修改了游戏中各个角色的位置大小后,就会在下一帧画面中显示出来。

在帧同步游戏中,Update()函数依然存在,只不过其大部分内容要移动到另一个类似的函数,暂称为UpdateByNext()-->由网络层不断的接收服务器发来的"网络帧"数据包,每次收到一个这样的数据包都调用一次这个UpdateByNext();这样的话游戏就从通过本地CPU的Update()驱动,改为网络的UpdateByNext()驱动。(注:网络发过来的同步帧速度会明显比本地CPU要慢的多,)

相关推荐
Thomas_YXQ4 天前
Unity3D Shader的阴影部分法线效果详解
开发语言·游戏·unity·架构·unity3d
氦客4 天前
Unity3D入门(四) : Android和Unity3D交互 - Unity调用Android
android·unity·交互·unity3d·调用·javaobject·javaclass
Thomas_YXQ8 天前
Unity3D PostLateUpdate为何突然占用大量时间详解
开发语言·数码相机·游戏·unity·架构·unity3d
Thomas_YXQ8 天前
Unity3D 中构建行为树插件详解
游戏·unity·架构·unity3d·游戏开发
随遇而安的生活12 天前
Unity android 接USBCamera
android·unity3d
留待舞人归13 天前
【Unity杂谈】iOS 18中文字体显示问题的调查
游戏·unity·ios·游戏引擎·unity3d
吾名招财14 天前
unity3d入门教程八-飞机大战
游戏引擎·unity3d
吾名招财20 天前
unity3d入门教程五
游戏引擎·unity3d
吾名招财20 天前
unity3d入门教程六
游戏引擎·unity3d
吾名招财20 天前
unity3d入门教程七
游戏引擎·unity3d