联机游戏时,角色刚体类型怎么设置

请问两个角色的刚体类型(static/kinematic/dynamic)分别如何设置,才能保证
1.角色a,b都无法穿过墙体
2.角色a,b会互相阻挡,即允许碰撞
3.移动a角色不会将b角色撞出去?

其中墙体设置了static类型
image

不受外力,可移动用kinematic

负责告诉你,联机游戏是不能用物理引擎的,包括刚体,因为物理引擎和刚体碰撞是不受逻辑帧控制。除非cocos引擎方提供替换物理引擎驱动的接口,让物理引擎由逻辑帧驱动。

举一个不能用物理引擎的例子:

两个玩家通过帧同步使用物理引擎,有一个刚体球在两个客户端的逻辑帧的第一帧从100米的高空自由落体,因为每个客户端受网络影响收到网络的逻辑帧的时间是不同的,网络慢的会迟一点收到,而刚体球是由物理引擎驱动,不受网络影响。这就造成了这样的结果,玩家A的网络好,刚体球在逻辑帧的第10帧到达地面,玩家B的网络差,刚体球在逻辑帧的第12帧到达地面。这样就双方物体在同一帧的位置就不同步了,碰撞自然就不同步了。

还是举刚体球落体的例子:如果球落到一半,一个客户端把游戏先退出到系统后台1秒钟,这时物理引擎停止了,可是网络的逻辑帧还在发送,再打开游戏时,球从上次的位置继续落体运动,但是另一个客户端的球早就落地了,这样就不同步了。

还有物理引擎是update处理的,每个客户端的每一帧的update的dt不一样,即使在相同的逻辑帧间隔,物理运动发生的位移也是不一样的。

所以帧同步游戏,不受逻辑帧控制的游戏逻辑都是不能用的。包括物理引擎,碰撞系统,tween运动都不行。所以市面上的基于物理引擎的帧同步游戏基本都是假的。帧同步前端逻辑是可以和ui分离的,不需要ui支持,拿到服务端也能运行,游戏引擎只做渲染而已。

3赞