确定碰撞发生在哪个碰撞器上

时间:2015-04-27 19:27:42

标签: unity3d

我有一个附有两个球形碰撞器的游戏对象。一个人检查了IsTrigger而另一个没有。

我想在与不同的碰撞器发生碰撞时执行不同的语句集。例如,我想为不同的碰撞播放不同的声音。有没有办法实现它?

我尝试过OnTriggerEnter(),但遗憾的是它被调用了两种类型的碰撞,因为其他碰撞对象触发了碰撞器。我只是想如果我们能够以某种方式找出碰撞发生在游戏对象的哪个碰撞器上,我们将能够实现它。

有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:1)

我多年来一直在使用Unity,并且遇到了很多像这样的问题,与糟糕的软件设计有关。我希望Unity人员在未来的版本中能更仔细地处理物理。

同时,您可以使用Physics.OverlapSpherePhysics.CheckSphere手动检查是否有与您的对象发生碰撞的内容。删除您用作触发器的对撞机并使用这些方法而不是OnTriggerEnter。这有点笨拙,但这会完成我认为的工作。

答案 1 :(得分:0)

让你的对撞机在检查器中可见(让它们公开或在它之前添加[SerializeField]),然后将对撞机绑定到那个代码。

然后,在碰撞中,将碰撞对象与持有碰撞器的变量进行比较,以便将它们分开。

答案 2 :(得分:0)

要检测OnTriggerEnter中的源触发器,必须对多个游戏对象托管触发器和附属脚本使用变通办法。

允许我链接到关于gamedev SO的答案: https://gamedev.stackexchange.com/a/185095/54452