早上在翻个人博客文件夹的时候,发现这篇18年10月30日写完的,再去翻了个人博客里,确实没发出来。随便把当时写的手稿也发上来。
游戏同步:帧同步和状态同步
帧同步:服务器负责转化客户端的操作,每个客户端在固定的逻辑帧执行该帧所有客户端的操作命令,通过在严格一致的时间轴上执行同样的命令序列得到同样的结果。主流的老牌RTS游戏都是帧同步:星际争霸、war3
状态同步:服务器承载所有计算,客户端只做表现。主流的大型MMO游戏都采用状态同步。
状态同步:适合人数比较多的场景,回合制,ARPG
帧同步:适合用于RTS,格斗,赛车游戏。
项目 | 状态同步 | 帧同步 |
---|---|---|
流量 | 相对高 | 相对低 |
回放 | 记录文件大 | 记录文件小 |
安全性 | 服务器实现逻辑,安全性高 | 逻辑在客户端,反外挂压力大,无法避免开图挂 |
战斗校验 | 协议加密,内存混淆;误差校验。无法彻底解决 | 服务器可以重启跑战斗 |
网络卡顿的表现 | 瞬移,回位,莫名掉血 | 战斗卡顿 |
服务器开发压力 | 大 | 小 |
客户端实现 | 调优状态同步方式,客户端需要做差值处理 | 客户端按照单机方式开发,保证逻辑层和表现层分离;逻辑层不要用到浮点数,不要用到不确定顺序的逻辑结构。对于物理引擎和浮点数计算都不要用Unity的 |
打击感 | 打击感相对差一点 | 打击感更好 |
客户端性能 | 优势明显,直接裁切 | 逻辑性能优化有压力 |
附 1
社会因素,对于我来说,知道帧同步,是因为王者荣耀这款手游。
当然王者荣耀能在手机上保持怎么好的网络稳定,离不开4G网络普及。当时我还是很少玩手机游戏。后来看到售楼处的小哥,午休聚在一起玩,我才意思到。这款游戏用户确认很多。
移动游戏战斗系统实现方式探讨
再谈网游同步技术