状态同步物理碰撞求解

玩家A操控物体a,
玩家B操控物体b,
每位玩家分别负责提交自己的位置数据。

场景:A移动,B停止不动。
当玩家A操控物体a冲向玩家B时,将产生物理碰撞,因为网络延迟,A显示碰撞到B的时候,B的页面显示A还未到达(延迟),这就出现了一个问题,A的页面显示已经将B撞飞了(本地物理效果),B的页面显示刚撞上,又因为B提交自己的位置数据,A的页面会显示B在来回闪烁移动(因为A的页面也运行了物理碰撞效果,B也在运行本地物理效果,所以来回闪烁)

物理新手,请大神指点。在cannon物理基础上怎么做到平滑碰撞

理想的状况是 A在碰到B的时候,发送碰撞点信息给B,B本地运行碰撞效果,然后提交位置给其他玩家。


难道要自己根据碰撞点写出冲力的大小?

你这个应该是后端计算,然后通知前端,前端你只负责把操作传递给后端,

假如a的网络延迟是100ms,b的延迟也是100ms,那200ms服务器通知后被撞的b才开始反应,如果a的速度很快,a能在200ms的时间内穿过b,这效果就不大好看了

如果b被撞后由a接管b的位置提交,让b不可操控自己,似乎可以顺滑显示,但是b的页面会显示还没碰上呢,自己的物体就飞了(位置更新的延迟)

我想了想自己玩的这些游戏,好像没有这样的场景,都是技能产生碰撞,好像是在避免出现这种直接碰撞的情况,就像守望先锋的大锤,碰撞是在放了shift之后