• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

网络游戏开发之同步模式

开发技术 开发技术 1周前 (11-24) 7次浏览

网络游戏开发之同步模式

网络游戏如何实现所有客户端玩家信息同步?(如吃鸡中所有玩家的位置同步)

同步模式一般分两种:状态同步和帧同步。

网络游戏开发之同步模式

状态同步:状态发生变化后,客户端上传操作到服务器,服务器收到后处理行为的结果,然后以广播的方式把状态发送给客户端,客户端收到状态后再根据状态显示内容。
如:吃鸡等大地图游戏、MMO游戏、因为MMO游戏的客户端承载有限,并不能把整张地图的实体全部展现出来。

帧同步:每一帧都要同步,每个客户端通过拿到相同的状态和指令,按帧顺序执行,达到同步效果。
如:LOL、王者荣耀等

二者区别:

1、状态同步的战斗逻辑在服务端,而帧同步的战斗逻辑在客户端,服务端只转发操作,不做任何逻辑处理。
2、状态同步比帧同步流量消耗大,服务器压力比较大,因为要做更多运算。
3、状态同步的安全性比帧同步高很多,因为状态同步的所有逻辑和数值都是在服务端的,而帧同步因为所有数据全部在客户端,所以解析客户端的数据之后就很容易作弊。
4、状态同步开发起来比较难,一个功能至少需要一个客户端和服务端共同完成;

回放&观战
帧同步的回放&观战比状态同步好做得多,因为只需要保存每局所有人的操作就好了,而状态同步的回放&观战,需要有一个回放&观战服务器,当一局战斗打响,战斗服务器在给客户端发送消息的同时,还需要把这些消息发给放&观战服务器,回放&观战服务器做储存,如果有其他客户端请求回放或者观战,则回放&观战服务器把储存起来的消息按时间发给客户端。

断线重连
状态同步的断线重连,就是把整个场景和人物全部重新生成一遍,各种数值根据服务端提供加到角色身上。
帧同步的断线重连就比较麻烦了,服务端要把断线时间内的所有消息一次性发给客户端,然后客户端加速整个游戏的核心逻辑运行速度(timeScale),直到追上现有进度。因为计算逻辑在客户端,一旦跳过某些帧数,很容易出问题。

注意:
需要保证每次随机的数字都相同,所以需要自己实现一套随机数,不能用unity自带的那个随机数接口,而且需要服务端发送相同的随机种子;
所有float型的参数必须变成int型,因为非常微小的误差就有可能产生蝴蝶效应,保证计算结果一致。


程序员灯塔
转载请注明原文链接:网络游戏开发之同步模式
喜欢 (0)