Unity碰撞反弹,但没有OnCollisionEnter

时间:2013-11-05 12:47:12

标签: unity3d game-physics unityscript

Unity碰撞系统有问题。

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

现在的问题是,当我朝向3d物体(岩石)射击子弹时,反弹而不是爆炸(也就是没有OnCollisionEnter被调用)。与其他碰撞器如盒子,胶囊或地形对撞机一起工作得很好。

我试图添加一个刚体,然后它开始工作,调用OnCollisionEnter 并且子弹爆炸,但问题是这个我可以用物理学移动3d对象,我不应该。为了解决这个问题,我试图在检查员中约束位置和旋转,我认为这解决了我的问题,因为项目符号在联系人上爆炸并且 3d对象赢了“移动,但现在我的另一个问题是我可以穿过对象 ......

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

Edit1 :忘记提及我已经尝试过IsKinematic 同样的规则适用,子弹反弹,但没有调用OnCollisionEnter。

Edit2,有点解决方法:我最终复制对象,从第二个移除网格渲染器缩小它并删除Gravity和IsKinematic,这种方式触发OnCollisionEnter和我的子弹爆炸,原来让IsKinematic女巫不让我走过对象,因为另一层有点大,子弹无法反弹。即使这似乎有用,对我来说似乎有点过度杀戮并且可能给我一个开销,是否有更好的解决方案呢?

3 个答案:

答案 0 :(得分:2)

我发现了造成这个问题的原因。我将球体对撞机半径设置得太小(0.025而不是0.5,不知道xD我的错误)和动态连续物理的一些奇怪的原因它检测到碰撞但没有引发事件。仅在与地形或基本形状相撞时,而不与网格对撞机相撞。

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

答案 1 :(得分:1)

如果你想禁用对象的物理特性(我不确定你是否已经这样做了)尝试点击对象,转到Rigidbody组件,并禁用重力复选框(假设你没有不希望重力应用)并启用“is Kinematic”复选框。运动学告诉团结不要将物理学应用于你的物体。

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

答案 2 :(得分:-1)

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