确定发生碰撞的碰撞体是哪一个

4
我有一个游戏物体,上面附有两个球形碰撞器。其中一个已经勾选了IsTrigger,而另一个没有。
当不同的碰撞发生时,我想执行不同的语句。例如,我想为两种不同的碰撞播放不同的声音。有没有办法实现呢?
我尝试了OnTriggerEnter(),但不幸的是它对于两种类型的碰撞都被调用了,因为其他碰撞对象具有触发器碰撞器。我只是想知道是否有办法找出碰撞发生在游戏物体的哪个碰撞器上,这样我们就能够实现它了。
那么有没有什么方法可以解决这个问题呢?

很奇怪,如果只有一个被选中为IsTrigger,那么只有它应该调用OnTriggerEnter。你尝试过使用两个子游戏对象,每个对象都有一个SphereCollider吗? - pinckerman
当我观察时,OnTriggerEnter对两个碰撞器都起作用。 - Sanath Bharadwaj
1
我差不多搞定了。我觉得使用子游戏对象是一个很酷的想法。 - Sanath Bharadwaj
2
请查看此链接中被采纳的答案:http://answers.unity3d.com/questions/188775/having-more-than-one-collider-in-a-gameobject.html - Imtiaj Ahmed
3个回答

1
我已经使用Unity多年了,遇到过很多类似的问题,都与糟糕的软件设计有关。我希望Unity团队在未来的版本中能更加谨慎地处理物理问题。
同时,您可以使用Physics.OverlapSpherePhysics.CheckSphere手动检查是否有物体与您的对象发生碰撞。删除您用作触发器的碰撞体,并使用这些方法代替OnTriggerEnter。这有点hacky,但我认为可以解决问题。

1

在检查器中使你的碰撞体可见(将它们公开或在其前面添加[SerializeField]),然后以这种方式将碰撞体与代码联系起来。

然后,在你的碰撞中,将碰撞对象与保存碰撞体的变量进行比较,以保持它们分开。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接