禁用游戏对象时检测 OnTriggerExit

Posted

技术标签:

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

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

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

    在 (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 );
        
    
    

    在 (0,0,0) 处创建一个球体,其中包含一个球体碰撞器和一个不使用重力的刚体

    将球体移出框,OnTriggerExit 被调用

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

    禁用球体,OnTriggerExit调用

    启用回球,OnTriggerEnter 被调用

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

我正在使用 Unity 5.4.1f

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于禁用游戏对象时检测 OnTriggerExit的主要内容,如果未能解决你的问题,请参考以下文章

启用动画器时,运行时缺少游戏对象精灵

如何在 Android 上的 Unity 中禁用用于屏幕截图的游戏对象?

检测另一个游戏对象上方的移动对象

如何在 ARCore Android 中禁用表面检测

使用旋转矩形进行碰撞检测

检测游戏对象上的鼠标点击[重复]