在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)