我面临一个关于触发器的非常简单的问题,但我没有看到任何解决方法。我只想在触发器中的对象被禁用时调用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 );
}
}
使用Sphere对撞机和不使用Gravity的Rigidbody在(0,0,0)处创建一个球体
将球体移出框,OnTriggerExit
被调用
将球体移回(0,0,0),调用OnTriggerEnter
停用球体,OnTriggerExit
不称为
启用后退球,OnTriggerEnter
被称为
显然,我想在禁用球体时调用OnTriggerExit
。你知道任何解决方案吗?
我正在使用Unity 5.4.1f
我当然可以在我的球体的OnDisable
功能中使用事件,但它不是很干净。我根本不明白为什么OnTriggerExit
没有被调用但是OnTriggerEnter
是。
答案 0 :(得分:2)
技术上没有理由说Unity无法在您的方案中调用OnTriggerExit
。然而,一个可能的原因是“其他”碰撞器是空的,因为它已被破坏并且如果不处理则会破坏很多情况。
但是,您可以使用OnTriggerStay
来解决此问题。它应该在每个帧中调用,并且第一次在您的场景中不调用它可能意味着另一个对撞机被禁用。