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

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

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

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

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

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

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

一.帧同步技术详解

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

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

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

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

相关推荐
Thomas_YXQ3 天前
Unity3D中管理Shader效果详解
开发语言·游戏·unity·unity3d·游戏开发
羊羊20353 天前
线性代数:Matrix2x2和Matrix3x3
线性代数·数学建模·unity3d
天人合一peng8 天前
Unity hub登录时一直无法进入license
unity3d
天涯学馆10 天前
Three.js灯光阴影与动画交互
前端·unity3d·three.js
Cool-浩12 天前
Unity3D 开发技巧
开发语言·前端·unity·c#·unity3d·实用技巧·unity开发教程
Cool-浩13 天前
Unity Vision Pro 保姆级开发教程-PolySpatial VisionOS Samples 示例场景
unity·游戏引擎·unity3d·案例·polyspatial·applevision pro·vision pro教程
Thomas_YXQ19 天前
Unity3D中Excel表格的数据处理模块详解
linux·windows·算法·excel·unity3d·游戏开发
Thomas_YXQ20 天前
Unity3D ScrollView 滚动视图组件详解及代码实现
开发语言·游戏·unity·架构·unity3d
指尖上的生活22 天前
Unity使用jslib构建失败
unity3d·webgl
Thomas_YXQ1 个月前
Unity3D Shader的阴影部分法线效果详解
开发语言·游戏·unity·架构·unity3d