3.x box2d物理刚体type设置bug

在2.x中,刚体的type是可以动态设置并且生效的,但是在3.x中,刚体type无论是在有无碰撞的条件下,type动态设置时,只有static,dynamic和kinematic三种状态切换生效并且正常运行,但是如果把上述三幢type创建好的刚体动态修改为animated这种扩展类型时,就会出现很奇葩的问题,此时用tween函数给刚体节点设置运动轨迹,刚体并不会跟着运动轨迹运行,而是向右上方运动,且不论是tween函数还是直接setPosition,不论设置位置是多少,刚体都会固定朝着右上方运动。在2.x中,可以先用刚体节点active=false,type=xxx,active=true来使type设置生效,然而在3.x中这种方法仍然不能够让刚体type动态设置为animated正常运行。希望引擎组人员能给出一个可行的解决方案

let node = await GameUtil.CreatePrefab(dz.res.prefab_ballPhy, this.node);
node.getComponent(RigidBody2D).type = ERigidBody2DType.Static;
await delay(1000);
node.getComponent(RigidBody2D).type = ERigidBody2DType.Animated;
tween(node).to(5, { position: v3(-500, -500, 0) }).start();

let node = await GameUtil.CreatePrefab(dz.res.prefab_ballPhy, this.node);
node.getComponent(RigidBody2D).type = ERigidBody2DType.Animated;
tween(node).to(5, { position: v3(-500, -500, 0) }).start();

上述代码两段代码分别运行,效果相同,用预制体创建了一个刚体,预制体中type为dynamic
下面附上代码运行视频

代码运行视频.zip (24.6 KB)

@lealzhan
@ freely0417

1赞

在index.d.ts中发现了一个get impl(): __private._cocos_physics_2d_spec_i_rigid_body__IRigidBody2D | null;表述是个私有方法,但是仍然能够调用,但是实际上调用没有作用,甚至impl.setActive等方法也不起效,这个到底是干嘛的
node.getComponent(RigidBody2D).impl.setType(ERigidBody2DType.Static);

官方尽快回复下,别沉啊

3.8.2版本box2d 刚体type设置同样有问题,创建好的刚体无法将type修改为animation

@ even457491559引擎开发团队