美文网首页
帧同步手游设计要点总结

帧同步手游设计要点总结

作者: 土豆吞噬者 | 来源:发表于2019-10-05 19:47 被阅读0次

通信协议的选择

由于tcp在网络不稳定时延迟严重,所以我们需要udp通信。由于udp的不可靠的特点,前期我们可以使用 使用别人封装好的可靠的udp协议,例如使用很广的kcp协议。如果发现kcp仍然不能满足我们的实时性要求,我们可以直接使用udp协议,自己控制丢包,乱序问题,例如每次发包都带上前两帧的数据以保证最大程度的低延迟,每次都发送两次udp包等。据说kcp+fce(前向纠错码)效果很好,可以试一试。

帧数据编码的选择

由于帧数据收发很频繁,所以尽量使用二进制流,而不是ProtoBuf,即使是无GC的ProtoBuf相信也没有二进制流快。

帧同步服务器工作流程

帧同步服务器固定时间(例如66ms)收集各个客户端的帧数据,然后转发给各个客户端,如果客户端某一帧数据未能及时发送给服务器,服务器不需要等待,而是将该客户端看作是在这一帧什么也没做。

关键数据判断

对于关键数据,例如比赛结果,需要服务器来判断,当战斗结果不一致时,取多数一致的结果。当然如果有能力最好使用客户端逻辑层作为校验服务器,当客户端数量少于3个或者关键数据不一致时,使用校验服务器重跑所有操作判断。

外挂检测

客户端不定时上传关键数据的hash,服务端通过对比客户端上传的hash值判断哪个客户端有作弊嫌疑。

回放观战服务器

当游戏开始时,帧同步服务器在发送帧数据给客户端的同时也发送给回放观战服务器,回放观战服务器存储帧数据,如果有其它客户端请求回放或者观战,则将存储的帧数据发送给客户端。

逻辑层和表现层

客户端要做到逻辑层和表现层分离,表现层先行(游戏画面),逻辑层等服务端指令再处理,逻辑层能独立编译。逻辑层更新的时间需要等间隔的,表现层则不一定,表现层的帧频率要高于逻辑层。

逻辑帧的频率由服务器控制,为了避免网络波动造成逻辑帧频率不稳定,客户端可以建立一个逻辑帧缓冲区,以固定频率处理逻辑帧。

碰撞检测

由于unity自带的物理碰撞检测系统使用的是浮点数且是乱序的,所以我们要使用自己的物理碰撞检测系统。

帧数据封包优化

由于帧数据收发很频繁,所以每一个包要足够小,最好在一个MTU以下,Internet上的标准MTU值为576,对于udp数据长度最好在576-20-8=548字节以内,如果使用封装udp的协议,需要考虑减去该协议自身的数据大小。

断线重连

客户端掉线重连时需要向服务端请求从头开始的所有帧数据,然后加速跑一次,考虑到客户端硬件配置可能不好,速度不能过快。

浮点数

由于浮点数有随机性,逻辑层的浮点数操作都需要改为定点数,表现层可以使用浮点数。

随机数

游戏开始时,所有客户端都需要使用相同的随机种子和随机算法以保证每个客户端表现一致。

待解决的问题

  • 客户端在上传帧数据时,帧同步服务器如何分辨客户端是否是伪造的?
  • 帧数据收发很频繁,是否需要加解密,需要的话是否影响性能,不需要的话会不会造成安全性问题?
  • 客户端表现层先行,如果收到的逻辑层数据和表现层不一致怎么办?例如人物转身了,但是由于网络延迟,服务器将我这一帧看作是空操作的情况。

相关文章

  • 帧同步手游设计要点总结

    通信协议的选择 由于tcp在网络不稳定时延迟严重,所以我们需要udp通信。由于udp的不可靠的特点,前期我们可以使...

  • 游戏帧同步的流程与实现

    大纲 帧同步的基本原理 帧事件数据采集 帧同步的事件处理与动画 帧同步的逻辑数据同步 帧同步之跳帧处理 现代多人游...

  • 帧同步游戏开发要点

    结论 先说一下我们在研究和使用了帧同步之后,得出的结论: 如果项目没有录像、观战功能,请先放弃使用帧同步的念头,尝...

  • 【汇总】PVP

    手游后台PVP系统网络同步方案总结 http://gad.qq.com/article/detail/14506 ...

  • 帧同步游戏的设计

    从单机游戏到网络游戏 单机游戏,这里指即时的动作类游戏,玩家输入操作,通过终端运算而进行的游戏。加入了多人网络以后...

  • 游戏中的网络同步机制<二> 王者荣耀对帧同步的应用

    参考解密:腾讯如何打造一款实时对战手游从《王者荣耀》来聊聊游戏的帧同步《王者荣耀》技术总监复盘回炉历程:没跨过这三...

  • 帧同步,状态同步

    帧同步: 什么是帧同步:帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前...

  • 帧同步

    帧同步在竞技类网络游戏中的应用 http://blog.sina.com.cn/s/blog_674f1bd201...

  • Unity帧同步的实现方法

    帧同步 游戏同步主要方向是 状态同步和帧同步。 状态同步 状态同步简单来说就是有一个权威服务器运行着一个没有图形界...

  • 动作手游实时PVP帧同步方案(客户端)

    http://blog.csdn.net/qq_27880427/article/details/52692772

网友评论

      本文标题:帧同步手游设计要点总结

      本文链接:https://www.haomeiwen.com/subject/uxdypctx.html