确定碰撞发生在哪个对撞机上
Determine on which collider the collision has taken place
我有一个带有两个球体碰撞器的游戏对象。一个检查了 IsTrigger,另一个没有。
我想在不同碰撞器发生碰撞时执行不同的语句集。例如,我想为两种不同的碰撞播放不同的声音。有什么办法可以实现吗?
我尝试了 OnTriggerEnter() 但不幸的是,由于其他碰撞对象触发了碰撞器,因此两种类型的碰撞都会调用它。我只是想如果我们能以某种方式找出发生碰撞的游戏对象的哪个碰撞器,我们就能实现它。
那么有什么办法可以解决这个问题吗?
我多年来一直在使用 Unity,遇到过大量与糟糕的软件设计相关的问题。我希望 Unity 的家伙们在未来的版本中更加小心地处理物理问题。
同时,您可以使用Physics.OverlapSphere
和Physics.CheckSphere
手动检查是否有物体与您的物体发生碰撞。删除您用作触发器的碰撞器并使用这些方法而不是 OnTriggerEnter
。这有点 hacky,但我认为这会完成工作。
让你的碰撞器在检查器中可见(使它们 public 或在它之前添加 [SerializeField])然后将碰撞器以这种方式绑定到代码中。
然后,在您的碰撞中,将碰撞对象与保存碰撞器的变量进行比较,以便您将它们分开。
要在 OnTriggerEnter
中检测源触发器,您必须使用多个游戏对象托管触发器和卫星脚本的解决方法。
请允许我 link 回答我在 gamedev 上的回答:
https://gamedev.stackexchange.com/a/185095/54452
我有一个带有两个球体碰撞器的游戏对象。一个检查了 IsTrigger,另一个没有。
我想在不同碰撞器发生碰撞时执行不同的语句集。例如,我想为两种不同的碰撞播放不同的声音。有什么办法可以实现吗?
我尝试了 OnTriggerEnter() 但不幸的是,由于其他碰撞对象触发了碰撞器,因此两种类型的碰撞都会调用它。我只是想如果我们能以某种方式找出发生碰撞的游戏对象的哪个碰撞器,我们就能实现它。
那么有什么办法可以解决这个问题吗?
我多年来一直在使用 Unity,遇到过大量与糟糕的软件设计相关的问题。我希望 Unity 的家伙们在未来的版本中更加小心地处理物理问题。
同时,您可以使用Physics.OverlapSphere
和Physics.CheckSphere
手动检查是否有物体与您的物体发生碰撞。删除您用作触发器的碰撞器并使用这些方法而不是 OnTriggerEnter
。这有点 hacky,但我认为这会完成工作。
让你的碰撞器在检查器中可见(使它们 public 或在它之前添加 [SerializeField])然后将碰撞器以这种方式绑定到代码中。
然后,在您的碰撞中,将碰撞对象与保存碰撞器的变量进行比较,以便您将它们分开。
要在 OnTriggerEnter
中检测源触发器,您必须使用多个游戏对象托管触发器和卫星脚本的解决方法。
请允许我 link 回答我在 gamedev 上的回答: https://gamedev.stackexchange.com/a/185095/54452