禁用游戏对象时检测 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的主要内容,如果未能解决你的问题,请参考以下文章