禁用游戏对象时检测 OnTriggerExit

Hel*_*ium 5 unity-game-engine game-physics

我面临着一个关于触发器的非常简单的问题,但我看不到任何解决方法。我只想在触发器内的OnTriggerExit对象被禁用时调用该函数。

这是在空场景中重现问题的方法:

  1. 在 (0,0,0) 处创建一个立方体,使用碰撞器作为触发器和非常简单的以下脚本:

    public class OnTriggerExitTest : MonoBehaviour
    {
        private void OnTriggerExit( Collider other )
        {
            Debug.Log( "Exiting : " + other.name );
        }
        private void OnTriggerEnter( Collider other )
        {
            Debug.Log( "Entering : " + other.name );
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用球体碰撞器和不使用重力的刚体在 (0,0,0) 处创建球体

  3. 将球体移出盒子,OnTriggerExit被调用

  4. 将球体移回 (0,0,0),OnTriggerEnter被调用

  5. 禁用球,OnTriggerExit不是

  6. 启用回球体,OnTriggerEnter 称为

触发退出测试

显然,OnTriggerExit当我禁用球体时,我想被调用。你知道任何解决方案吗?

我正在使用 Unity 5.4.1f

我当然可以在OnDisable我的领域的功能中使用事件,但它不是很干净。我只是不明白为什么OnTriggerExit不是被调用而是OnTriggerEnter被调用。

Bar*_*art 2

从技术上讲,Unity 没有理由无法OnTriggerExit在您的场景中进行调用。然而,一个可能的原因是“其他”碰撞器是空的,因为它已被破坏,如果不处理,会弄乱很多情况。

但是,您可以通过使用来解决这个问题OnTriggerStay。它应该在每一帧被调用,第一次在你的场景中没有被调用可能意味着另一个碰撞器被禁用。