Unity帧同步的探索之路二 不靠谱的Unity物理引擎

Unity帧同步的探索之路二 不靠谱的Unity物理引擎

1.为何不靠谱?

众所周知,在使用帧同步的情况下最好不要使用Unity自带的物理引擎。

具体为什么不同步,网上给出的答案全都是会造成不同步。

因为Unity自带的物理引擎内部是由浮点数参与计算的,而浮点数在不同平台产生的结果也不一样,就导致了结果有所浮动,且不一致,所以就造成了不同步。

因此就衍生出了定点数

而帧同步为了保证各平台同步的情况下,则必须使用定点数。

虽然说网上都说要使用定点物理库来保各平台的一致性。

但肯定会有不少人会去巧妙的构想:在使用定点数保证两名玩家位置一致,旋转一直,操作一致(在同一帧)的情况下,也就是绝对同步的情况下,使用Unity自带的物理引擎,进行碰撞,会不会得到相同的结果。

带着这个思想,咱们就去探究一番Unity物理系统的计算会不会造成不同步。

2.测试环境

1.首先保证两个客户端:

扫描二维码关注公众号,回复: 14674289 查看本文章
  • 位置一致
  • 旋转一致
  • 输入一致

2.然后在角色的武器上添加Unity的BoxCollider,在角色身上添加刚体,达成碰撞条件。

3.攻击时通过武器碰撞敌方玩家的回调,来播放对方玩家的受击动画。目的就是为了测试碰撞算法的准确率。

3.碰撞演示

下面是测试效果:
在这里插入图片描述

在这里插入图片描述

4.测试结果

在同一台电脑的模拟器上 进行了多次测试,保证两个玩家位置、旋转、输入、一致的情况下,碰撞算法得到的结果却不稳定,有不小的浮动性。有时结果一致,有时结果不同,甚至在一致结果的情况下会出现两种不同的表现结果。
猜测是物理系统内部浮点数导致计算结果具有上下浮动值,从而产生了在一台设备上的结果不同。

所以帧同步最好还是要使用定点数物理库,否则游戏过程中出现一个不同步,就会影响后续的计算。

或者在击中判定采取定点物理计算的方式,来保证不同不平台下的结果一致性。

所以在帧同步中,还是要避免掉一切有关于float浮点数相关的计算,否则会造成不同步问题。

下一篇:案例视屏地址:帧同步卡牌放置手游案例

猜你喜欢

转载自blog.csdn.net/qq_42461824/article/details/117391595