禁用gameobject时检测OnTriggerExit

时间:2017-01-18 10:16:21

标签: unity3d 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 );
        }
    }
    
  2. 使用Sphere对撞机和不使用Gravity的Rigidbody在(0,0,0)处创建一个球体

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

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

  5. 停用球体,OnTriggerExit 称为

  6. 启用后退球,OnTriggerEnter 被称为

  7. OnTriggerExitTest

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

    我正在使用Unity 5.4.1f

    我当然可以在我的球体的OnDisable功能中使用事件,但它不是很干净。我根本不明白为什么OnTriggerExit没有被调用但是OnTriggerEnter是。

1 个答案:

答案 0 :(得分:2)

技术上没有理由说Unity无法在您的方案中调用OnTriggerExit。然而,一个可能的原因是“其他”碰撞器是空的,因为它已被破坏并且如果不处理则会破坏很多情况。

但是,您可以使用OnTriggerStay来解决此问题。它应该在每个帧中调用,并且第一次在您的场景中不调用它可能意味着另一个对撞机被禁用。