帧同步Moba游戏相关的经验总结

下面相关的只是本人开发中遇到的坑,记录下来,方便日后查看。

架构方面:

1、服务器架构:

a)       游戏大厅服务器,数据服务器要和游戏逻辑服务器分离,要保证玩家在对战进行中是直接和逻辑服建立socket连接的,这样才能确保低延迟,保证帧同步的稳定性。

2、客户端架构:

a)       要保证逻辑和渲染的分离,逻辑帧定时向服务器发送帧数据,服务器汇总定时下发,渲染帧根据逻辑位置跟进渲染,当有延迟或者断线时,模拟之前的操作,等待新数据或重新连接。

 

逻辑相关:

1、游戏开始帧必须一致: 第一帧服务器要等到所有客户端都有上行操作,才开始同步。如果不这样,就会导致所有客户端的不一致性。

2、慎重选择第三方库,包括寻路相关,因为第三方库很多都是非实时调用的方法,但是帧同步必须要求逻辑帧实时。

3、浮点数: 关于浮点数的使用必须统一进行截断,每一个参与计算的逻辑位置,每一个距离判断的平方值等等,都需要进行截断,否则不同机型,不同CPU就会造成数据差异,导致整场战斗不同步。

4、寻路: 帧同步最好不要使用物理引擎,否则服务器很难验证数据的正确性,上线后对于外挂等无法鉴定。使用统一的寻路算法,边界位置通过寻路导出最近点即可。

5、子弹等技能相关: 要确保所有客户端上子弹打中被击者的帧数一致,表象上可以有平滑的细微不同,否则一味追求表现完全一致,则很可能整场战斗同步出现问题。

6、效率问题: 帧同步必须保证稳定的帧率,移动和技能相关才能表现流畅,所以,一定要降效率提高,保证整场游戏都在30帧以上。否则会出现频繁卡顿,影响游戏的进行。(这个问题还需要持续优化,目前只能优化到50%。),尤其是动画系统,NGUI,UGUI等的效率。

7、随机库: 保证服务器和每个客户端计算出的随机数一致,封了一个库,每局开始战斗,由服务器生成随机种子下发致每个客户端,每个客户端每次随机都使用该种子在同一库中进行随机,确保每次随机出的结果一致。

8、日志: 由于不规范的代码很有可能导致不同步现象,所以每一局对战的击中,伤害,总帧数等等做好记录,方便随时查询不同步现象。

(待后续更新)


你可能感兴趣的:(unity,MOBA)