【问题标题】:Detect OnTriggerExit when disabling gameobject禁用游戏对象时检测 OnTriggerExit
【发布时间】:2017-01-18 10:16:21
【问题描述】:

我面临一个关于触发器的非常简单的问题,但我没有找到任何解决方法。我只想在 触发器内 的对象被禁用时调用 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. 在 (0,0,0) 处创建一个球体,其中包含一个球体碰撞器和一个不使用重力的刚体

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

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

  5. 禁用球体,OnTriggerExit调用

  6. 启用回球,OnTriggerEnter 被调用

显然,我希望在禁用球体时调用OnTriggerExit。你知道有什么解决办法吗?

我正在使用 Unity 5.4.1f

当然,我可以在我的球体的OnDisable 函数中使用事件,但它不是很干净。我只是不明白为什么不调用OnTriggerExit 而调用OnTriggerEnter

【问题讨论】:

    标签: unity3d game-physics


    【解决方案1】:

    从技术上讲,Unity 没有理由不能在您的场景中调用 OnTriggerExit。然而,一个可能的原因是“其他”对撞机是空的,因为它已经被破坏并且如果不处理会搞砸很多情况。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多