王者荣耀技术总监复盘技术选型
《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了youxiputao.com帧同步
优点是打击感强,流量少。
缺点是网络要求比较高,反外挂能力弱,断线重连返回时间长,性能优化困难。
状态同步
优点是安全性高,对于网络的带宽和抖动包有更强的适应能力,断线重连比较快,性能优化比好做(可以裁剪)。
缺点是比较难做出好的打击感,费流量。
技术要点
- 保证计算正确:各种计算的浮点数处理
- 底层协议选择:UDP,KCP, 冗余UDP,kcp+fec,TCP, 可以结合多种方案使用,根据网络状况或者其他条件切换不同的协议。
- 帧同步优化:插值,表现逻辑分离。其余常见的:GC, drawcall, 裁剪,3DUI
为什么选择帧同步:最重要的原因是有趣的技能很难用状态同步做出理想的效果。
浮点数优化方案:
浮点数问题:
- 跨平台,不同平台之间计算结果可能不同。尤其是Android环境下, CPU千差万别。
- float的运算问题主要体现在逻辑和物理计算上,而Navmesh可能是比较稳定的。
- 不同的调用顺序,时序,容器排序的不稳定性,协程的不稳定性,随机值等。
解决方案:
- 不用浮点数,采用定点数
- 做好随机种子
- 不使用coroutine
- 统一的逻辑tick入口,更新整个战斗逻辑,而不是单个逻辑去update.保证执行顺序一致性。
逻辑回滚
逻辑快照
其他优化方案:
- TCP, KCP, 冗余包的非可靠UDP, KCP+fec, 可多种方案结合使用
- 逻辑和表现分离
- 逻辑帧负载均衡
- 多线程收发
- 分地域部署和匹配