MMORPG网络游戏如何实现玩家同步
在很多开发者的眼里,网络游戏是如何实现玩家同步,这点一直很神秘,特别是没有做过大型网络游戏项目的小伙伴,今天我们一起来分享一下网络游戏是如何来实现多玩家同步的。网络游戏同步,从技术方向来说有两个,一个是状态同步,一个是帧同步。
状态同步是如何实现的呢?其实很简单,就是服务器上跑游戏逻辑,服务器通过网络接收玩家的输入,在服务器计算游戏逻辑,推进游戏进度向前发展,如果有状态改变和产生了重要的事件,把状态同步给感兴趣的客户端,客户端播放动画即可。这里需要重点解决的一些技术问题,接下来我们总结并分析下如何实现。

1: 服务器基于帧率来迭代游戏逻辑
服务端游戏逻辑和客户端一样,也是基于帧频来迭代计算的,这个帧率的设置目前有两大方向,一个是固定的帧率(比如1秒20次迭代计算),有一种是动态的改变帧率。很多游戏都采用简单一点的固定帧率来做。帧率没有必要像客户端一样,60FPS,客户端维持60FPS是为了维持动画的流畅,而服务器上完全没有必要维持这么高的帧率,帧率越低,意味着计算量越少,同时为了游戏手感,一般服务器的以帧率15FPS--->20FPS来触发。如果有一些迭代进度比较高的可以采用FixedUpdate机制,拿20FPS为例, 那么帧的时间间隔就是50ms, 如果有一些高精度的迭代,要求60FPS,也就是16ms就要迭代一次,这个怎么办呢?那么采用fixedUpdate, 将50ms 分成几次迭代,每次迭代的时间间隔为16ms这个就是FixedUpdate机制。如物理引擎,为了防止穿透,如果你迭代的次数少,时间间隔长,那么迭代计算后,可能容易穿透,那FixedUpdate来迭代物理引擎,增加迭代次数,这样能让物理计算更精准。基于帧频,我们编写游戏逻辑就像客户端一样了,但是只是不用管UI,和动画这些表现而已。听上去很蛮烦,其实写起来也简单。基于帧率的模式设计完成后,再实现一些基于帧率的常用的模块,比如游戏中的定时器等。
2: 服务器上跑游戏地图
服务器上帧频的机制确立好以后,接下来就是要部署一个地图在服务器上,服务器的地图如何做呢?其实很简单,如果是2D地图,我们把地图看作是一个xoy平面,把地图分成一些小块,并在平面上标记出来哪些区域块是障碍物,哪些可以行走。这个数据可以在客户端的地图编辑器编辑好,并把这个数据导出来给服务器用。如果是3D游戏,俯瞰游戏3D地图,将地图看作一个平面,和2D一样标记区域,哪些是障碍物,哪些是路径,如果你的3D游戏地图中,没有上坡和下坡,那么就和普通的2D游戏没有区别,如果有上坡下坡,就让客户端把地图的高度图导出来,你给定一个(x, z), 可以得到一个y的高度值。 地图数据确立好后,接下来就要编写服务器上的寻路算法与导航,能控制服务器上的玩家对象在地图上移动,当然这些都是数据,没有图像。
服务器上跑地图,要结合客户端做一个地图编辑器,地图编辑器导出地图数据给服务器。

附视频教程 点击可直接学习
MMORPG状态同步视频教程
https://bycwedu.vipwan.cn/promotion_channels/1228978875
为视频教程制作者Blake老师打CALL 下次再写帧同步。