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

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

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

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

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

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

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

一.帧同步技术详解

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

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

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

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

相关推荐
Thomas游戏开发3 天前
Unity3D 使用 ILRuntime 时的性能问题详解
前端·unity3d·游戏开发
留待舞人归8 天前
【Unity3D优化】AssetBundle的压缩格式优化
游戏·unity·游戏引擎·unity3d
Thomas游戏开发10 天前
Unity3D游戏排行榜制作与优化技术详解
前端框架·unity3d·游戏开发
Thomas_YXQ11 天前
Unity3D Shader 简析:变体与缓存详解
开发语言·前端·缓存·unity3d·shader
Thomas游戏开发12 天前
Unity3D 架构师如何处理大世界地图技术详解
前端框架·unity3d·游戏开发
Thomas游戏开发12 天前
Unity3D MMORPG 任务系统的架构与设计详解
前端框架·unity3d·游戏开发
jojo的奇妙前端23 天前
unity - 排行榜 - 头像(二)
unity3d
scott.cgi25 天前
「Unity3D」在Unity中使用C#控制显示Android的状态栏
unity·unity3d·android状态栏·c#控制android状态栏·unity显示状态栏
Thomas_YXQ1 个月前
Unity3D项目开发中的资源加密详解
游戏·3d·unity·unity3d·游戏开发
Thomas_YXQ1 个月前
Unity3D 动态骨骼性能优化详解
开发语言·网络·游戏·unity·性能优化·unity3d