Unity 帧同步游戏解决方案梳理

一、保证所有客户端的计算结果一致

保证所有客户端的计算结果一致
1、逻辑与显示分离
逻辑控制显示,而显示的执行并不能影响逻辑和数据,做到脱离显示模块,游戏也能正常运行。
2、浮点的处理
浮点运算在不同操作系统算出来的结果有精度差异,所以用定点数方案。
定点数的原理就是把小数转成整数存储和计算,然后再进行转换,网上也有很多定点数的现成库。
浮点处理一般有两种办法,一种分数,一种定点数。据说王者荣耀是用分数(不确定)。定点数性能要比浮点数差。
3、随机数处理
使用伪随机代替随机数。基本功能只需要,设定一个种子,取随机只跟取出的次数有关,然后就是保证随机性。
4、替换unity自带的物理引擎和Navigation寻路
因为unity对物理引擎和Navigation寻路用到了浮点数,导致执行结果不可控,无法保证计算一致性。
如:使用第三方的定点数物理引擎代替unity物理引擎(如:BEPUphysicsint);使用支持帧同步的astar代替navigation,首先导出navmesh为mesh文件获得导航网格数据,然后用四叉树序列化网格顶点,用于查询目标的所在位置;

二、帧同步手感优化:

帧同步本身存在延迟问题,还可能遇到丢包的情况,导致游戏画面或手感存在很大的问题。
1、帧预测
在客户端超过一定的时间没收到同步帧时,那么我们就先认为这一帧啥指令也没有,空跑一帧,比如:让场上的角色继续以上一帧的速度往前走。大部分情况下,这种预测是对的。但是预测之前,要记录一些数据,以便同步帧过来后回滚这些信息。另外只需要预测跟运动相关的简单操作即可,复杂的预测没必要也不好回滚。(玩家越多,预测失败概率越高,回滚就会压力更大,好在我们这个只是1V1)
2、矫正
当加了预测又重新收到同步帧时,不要让角色瞬间回到目标位置,使用tween方法控制角色以合适的速度平滑地移动到目标位置,保证角色不会一卡一卡的,也不会一会儿快一会儿慢,从而为了提升游戏画面和手感。
3、平滑处理
为了应付网络抖动,可能缺帧或者多帧的情况,客户端以固定帧率去执行每帧的事件,让游戏更加流畅。
4、帧回滚
当客户端接收的服务器同步帧和本地的帧预测结果不一致时,客户端需要进行帧回滚,将本地的游戏数据恢复。帧回滚可以保证各个客户端的游戏状态保持一致,但是会带来一定的游戏画面延迟和卡顿。

三、不同步问题总结:

1、浮点和随机上面说了,这里不做过多叙述。
2、不确定顺序的容器的遍历要严令禁止,lua表的遍历,for pairs是必须要禁止的,可以使用for ipairs。C++的Map等,总之在使用容器的遍历时,一定要查阅是否是确定顺序的。
3、代码不要出现“我”这样的逻辑,对于不同客户端和服务器“我”是不同的,但是据我观察,这个是避免不了的,特别对于界面显示来讲,所在在使用“我”的时候一定要注意,不要影响战斗逻辑。
4、原则上除了Input是不让C#调用lua代码的,但是也是不可避免有些显示相关的需要回调到lua,这里也千万不要改变战斗逻辑,建议从C#回调lua的战斗代码统一写到一个地方,方便查阅和检查。
5、不同平台的long型是不一样的,long这个类型最好是不要使用,要么用int,要么用longlong。

四、帧同步优化:

AOI算法:一般用于MMO大地图游戏,每个物体都有自己的AOI(区域划分),只对一定半径范围内发生的事件进行处理,区域注释。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Unity帧同步插件是一种用于在Unity游戏引擎中实现帧同步的工具。帧同步是为了保持多个客户端之间的游戏状态同步而存在的技术。在多人游戏中,为了让不同玩家在不同的设备上有相同的游戏体验,需要确保每个客户端上的游戏状态保持一致。 Unity帧同步插件为开发人员提供了一套易于使用的方法和工具来管理游戏状态的同步。通过使用这些插件,开发人员可以在不同的设备上实现帧同步,保持所有玩家的游戏状态同步。这包括玩家的位置、动作、碰撞等。插件还提供了一些额外的功能,例如控制网络延迟、处理断线重连等。 使用Unity帧同步插件有几个步骤。首先,开发人员需要在游戏中定义同步的对象和属性。然后,他们可以使用插件提供的方法来处理同步逻辑,例如发送和接收同步消息。最后,他们可以使用插件提供的工具来测试和调试帧同步的性能和稳定性。 Unity帧同步插件的优势在于它减少了开发人员的工作量,并提供了一套完整的解决方案来处理帧同步的问题。它还提供了一些性能和稳定性的优化,以确保游戏在不同设备上都能正常运行。总之,Unity帧同步插件是一种非常有用的工具,可以帮助开发人员轻松实现游戏状态的同步。 ### 回答2: Unity帧同步插件是一种在Unity游戏开发中使用的工具,用于实现多个玩家在不同设备上的实时同步。它主要解决了在多人游戏中的网络延迟和同步问题。 通过Unity帧同步插件,游戏中多个玩家的行动和动画能够在各个设备上同步进行,保证了游戏的整体一致性和公平性。它采用了一种基于服务器的架构,通过将玩家的操作输入发送到服务器,然后在每个设备上进行处理和渲染,实现了实时的游戏同步。 在使用Unity帧同步插件时,需要先设置服务器和客户端之间的通信。服务器负责接收和处理玩家的输入,然后将结果发送给客户端进行渲染。为了保证游戏的流畅性和准确性,插件会对延迟进行预测和校正,确保所有玩家在游戏中的操作都能够及时生效。 除了同步玩家的操作之外,Unity帧同步插件还可以同步游戏中的其他数据,例如位置、速度、状态等。这些数据也会通过服务器进行传输和同步,保证了游戏的整体一致性。 总之,Unity帧同步插件是一种非常有用的工具,可以解决多人游戏中的网络延迟和同步问题。它能够确保游戏中的多个玩家在不同设备上可以实时同步,提供了更好的游戏体验和公平性。它在Unity游戏开发中的应用非常广泛,是开发多人游戏的重要工具之一。 ### 回答3: Unity帧同步插件是一种用于实现多人游戏中玩家间行为同步的工具。当多个玩家同时参与游戏时,每个玩家都需要在自己的设备上独立计算游戏逻辑,并将自己的操作结果同步给其他玩家,以实现游戏的正常进行。 Unity帧同步插件通过在每帧开始时,将每个玩家的操作发送给服务器,并由服务器中立地计算得到每帧的游戏状态。然后服务器将这些计算结果发送给每个玩家,以保证每个玩家都能够在自己的设备上以相同的帧同步进行游戏Unity帧同步插件的实现过程中通常会使用到各种同步技术,如状态同步、输入同步、事件同步等,以保证每个玩家在游戏中的行为能够同步到其他玩家的设备上,从而实现游戏的公平性和可玩性。 使用Unity帧同步插件可以方便地实现多人游戏的开发,减少开发者在网络同步方面的工作量。同时,Unity帧同步插件还可以提供一定程度的防作弊机制,保证游戏的公平性。 总而言之,Unity帧同步插件在多人游戏开发中起到了重要的作用,它能够方便地实现玩家之间的行为同步,提高游戏的可玩性和公平性。开发者可以根据自己的需求选择适合的帧同步插件,并结合其他技术手段来实现更优秀的多人游戏体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小程小程,永不消沉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值