多人游戏的问题
在多人游戏中,最复杂的问题之一是使所有玩家的状态与服务器状态保持同步。 互联网上有一些关于该主题的好文章。 但是,某些细节到处都是,这可能会使游戏编程领域的初学者感到困惑。 我希望我可以在这篇文章中澄清一下。
我将介绍此问题空间中常用的一些技术。
- Unity游戏引擎入门
- 开放世界游戏设计中的“追随乐趣”:刺客信条和孤岛惊魂的教训
- Pushy&Pully开发更新#12
- 可编辑的Lighting and React dat.GUI
- Kitfox Games 2018:一次完成所有操作
在进入问题之前,让我们先概述一下多人游戏的总体运作方式。
通常,游戏程序需要模拟以下内容:
时间和玩家投入方面的环境变化
游戏是有状态程序,因此它取决于时间(是真实时间还是逻辑时间)。 例如,PACMAN正在模拟一个环境,幽灵将不断移动。
多人游戏也不例外,但是由于多人游戏之间的互动,复杂性更高。
让我们以经典的Snake游戏为例:
假设我们使用服务器-客户端设置。 核心游戏逻辑是这样的
- 读取用户输入(可以是[←,↑,→,↓]之一)来更改蛇的方向。
- 应用用户输入(如果有); 这改变了蛇的方向。
- 将蛇移动1个单位空间
- 检查是否有任何蛇撞到敌人/墙壁/自己身上,然后将其从游戏中移除。
- 重复!
该逻辑将在服务器端以固定的间隔运行。 如下所示,每个循环称为一个frame
或一个tick
最简单的客户端将监听服务器更新,并将接收到的每个帧呈现给播放器。