【BUG?】含刚体组件的预制体 动态生成时可以被 穿过?

这个脚本是挂载在canvas中的,是用于测试动态生成预制体的效果

这个bound预制体是一个竖直的白色长条,是用于阻挡主角移动的,它挂载了刚体组件,以及物理碰撞组件。

我们的主角hero也是挂载了刚体组件的,刚体类型是Dynamic:

运行后,发现主角是可以自由穿过这个生成的预制体的:

注意我的物理系统管理器是打开了的,那个代码在另一个脚本文件中。

然后我发现如果我直接将这个bound预制体在Cocos Creator 中拖到canvas节点下然后运行,玩家又不能穿过这个预制体了,这说明这个预制体本身是没有问题的,那问题出在哪里呢?

求大家帮忙看一看

需要同步节点坐标, RigidBody.syncPosition()

我将它改成这样了:

可是运行之后依然可以穿过。

另外,可以请教您一下这个方法“同步节点的世界坐标到 box2d 刚体的坐标上”是什么意思吗?

先设置坐标,在同步RigidBody,打开下面的的标志,看下相关的RigidBody跑哪去。

cc.director.getPhysicsManager().debugDrawFlags = cc.PhysicsManager.DrawBits.e_aabbBit |
cc.PhysicsManager.DrawBits.e_pairBit |
cc.PhysicsManager.DrawBits.e_centerOfMassBit |
cc.PhysicsManager.DrawBits.e_jointBit |
cc.PhysicsManager.DrawBits.e_shapeBit;

我按您说的做了,别的对象都能看到RigidBody,就这个脚本里面实例化的预制体看不到:cry:

我还发现假如我直接把预制体拖到canvas下面会报一个错误,

有没有可能和这个有关系呢?:cry:

我现在终于明白问题在哪里了,应该是 cc.director.getPhysicsManager().enabled = true; 这一句和实例化预制体的执行顺序问题。我写代码太不规范了。谢谢你的帮助,你们辛苦了。