1 / 8
文档名称:

unity3d中帧同步的实现:帧同步长度固定间隔下的实现.pdf

格式:pdf   大小:268KB   页数:8页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

unity3d中帧同步的实现:帧同步长度固定间隔下的实现.pdf

上传人:熙凤 2022/1/12 文件大小:268 KB

下载得到文件列表

unity3d中帧同步的实现:帧同步长度固定间隔下的实现.pdf

相关文档

文档介绍

文档介绍:Unity3D 中帧同步的实现(一):帧同步长度固定间隔下的实现
在帧同步模型中,每个客户端都会对整个游戏世界进行模拟。这种方法的好
处在于减少了需要发送的信息。帧同步只需要发送用户的输入信息,而对于反过
来的中心服务器模型来说,单位的信息则发送越频繁越好。
比如说你在游戏世界中移动角色。在中心服务器模型中,物理模拟只会在服
务器执行。客户端告诉服务器,角色要往哪个方向移动。服务器会执行寻路而且
开始移动角色。服务器紧接着就会尽可能频繁地告知每个客户端该角色的位置。
对于游戏世界中的每个角色都要运行这样的过程。对于实时策略游戏来说,同步
成千上万的单位在中心服务器模型中几乎是不可能的任务。
在帧同步模型中,在用户决定移动角色之后,就会告诉所有客户端。每个客
户端都会执行寻路以及更新角色位置。只有用户输入的时候才需要通知每个客户
端,然后每个客户端都会自己更新物理以及位置。
这个模型带来了一些问题。每个客户端的模拟都必须执行得一模一样。这意
味着,物理模拟必须执行同样的更新次数而且每个动作都需要同样的顺序执行。
如果不这么做,其中一个客户端就会跑在其他客户端之前或者之后,然后在新的
命令发出之后,跑得太快或者太慢的客户端走出的路径就会不同。这些不同会根
据不同的游戏玩法而不同。
另一个问题就是跨不同的机器和平台的确定性问题。计算上很小的不同都会
对游戏造成蝴蝶效应。这个问题会在后续的文章中讲到。
这里的实现方案灵感来自于这篇文章:《1500 个弓箭手》。每个玩家命令
都会在后续的两个回合中执行。在发送动作与处理动作之间存在延迟有助于对抗
网络延迟。这个实现还给我们留下了根据延迟以及机器性能动态调整每回合时长
的空间。这部分在这里先不讨论,会在后续文章再说。
对于这个实现,我们有如下定义:
帧同步回合:帧同步回合可以由多个游戏回合组成。玩家在一个帧同步回合
执行一个动作。帧同步回合长度会根据性能调整。目前硬编码为 200ms。
游戏回合:游戏回合就是游戏逻辑和物理模拟的更新。每个帧同步回合拥有
的游戏回合次数是由性能控制的。目前硬编码为 50ms,也就是每次帧同步回合
有 4 次游戏回合。也就是每秒有 20 次游戏回合。
动作:一个动作就是玩家发起的一个命令。比如说在某个区域内选中单位,
或者移动选中单位到目的地。
注意:我们将不使用 unity3d 的物理引擎。而是使用一个确定性的自定义引
擎。在后续文章中会有实现。
游戏主循环
Unity3d 的循环是运行在单线程下的。可以通过在这两个函数插入自定义代
码:
()
()
Unity3d 的主循环每次遍历更新都会调用 Update()。主循环会以最快速度运
行,除非设置了固定的帧率。
Fixe