0

Unity 碰撞系统有问题。

我正在尝试使用网格对撞机(凸网格对撞机打勾)将一些 3d 对象(岩石)添加到我的场景中,但没有刚体。我有一个带有刚体和球体对撞机的子弹预制件。我在子弹预制件上附加了一个脚本,OnCollisionEnter它应该破坏子弹预制件并播放爆炸粒子。

现在的问题是,当我将子弹射向 3d 对象(岩石)时,它会反弹而不是爆炸(也就是没有调用 OnCollisionEnter)。与其他对撞机(如盒子、胶囊或地形对撞机)一起使用就可以了。

我试图向它添加一个刚体,之后它开始工作,调用 OnCollisionEnter并且子弹爆炸,但问题是我可以用物理移动 3d 对象,这是我不应该能够的。为了解决这个问题,我尝试在检查器中限制位置和旋转,我认为这解决了我的问题,因为子弹在接触时爆炸并且3d 对象不会移动,但现在我的另一个问题是我可以穿过对象...

知道如何解决我的问题吗?这样我就会有一个带有meshcollider的3d对象,在与球体对撞机接触时调用OnCollisionEnter,但不让我通过它?

Edit1:忘了提到我已经尝试过 IsKinematic相同的规则适用,子弹弹开,但没有调用 OnCollisionEnter。

Edit2,有点解决方案:我最终复制了对象,从第二个中移除了网格渲染器,稍微缩放它并移除 Gravity 和 IsKinematic,这样该层触发 OnCollisionEnter 并且我的子弹爆炸,原件在 IsKinematic 女巫不让我穿过物体,因为另一层有点大,子弹不能反弹。尽管这似乎可行,但对我来说,这似乎有点过头了,可能会给我带来开销,有没有更好的解决方案?

4

3 回答 3

2

我发现了导致问题的原因。我将球体对撞机半径设置得太小(0.025 而不是 0.5,不知道 xD 我的错)并且由于动态连续物理的某些奇怪原因,它正在检测碰撞但没有引发任何事件。仅当与地形或基本形状发生碰撞时,而不与网格碰撞器发生碰撞。

这是一个有趣的行为,但至少现在我知道我做错了什么。

于 2013-11-06T09:28:48.367 回答
1

如果你想禁用对象的物理特性(我不确定你是否已经这样做了)尝试单击对象,转到刚体组件,然后禁用重力复选框(假设你不想要重力应用)并启用“是运动学”复选框。运动学告诉统一不要将物理应用于您的对象。

编辑:还请确保撤消您当前拥有的固定定位,如果 Kinematic 为您工作,那就是。

于 2013-11-05T13:31:01.507 回答
-1

我忽略了一些可能对某人有帮助的东西。当我的游戏使用 2D 物理时,我试图检测 3D 碰撞。因此,例如,如果您使用 BoxCollider 2D ,请确保您使用 OnCollisionEnter 2D(Collision 2D碰撞)

于 2017-01-26T16:15:52.743 回答