1 回答
TA贡献1842条经验 获得超12个赞
我可以创建一个游戏对象并附加一个脚本来控制所有触发事件,而不是为每个对象创建一个脚本吗?
为了OnTriggerEnter2D被调用,包含它的脚本必须附加到将涉及碰撞的游戏对象。如果不这样做,它将不会被调用。
如果您需要一个通用脚本来处理所有碰撞检测,则必须使用事件和委托来执行此操作。创建一个delegate命名CollisionAction然后从该delegate命名的事件OnTriggered。当OnTriggerEnter2D被调用时,调用该OnTriggered事件。将它附加到您想要检测碰撞的所有游戏对象上。
public class CollisionCallback : MonoBehaviour
{
public delegate void CollisionAction(Collider2D collision);
public static event CollisionAction OnTriggered;
void OnTriggerEnter2D(Collider2D collision)
{
if (OnTriggered != null)
OnTriggered(collision);
}
}
现在,在要用于处理碰撞的主脚本上,在函数中注册OnTriggered事件并在OnEnable函数中取消注册OnDisable。在脚本OnTriggerEnter2D中调用时,将调用 中注册CollisionCallbackMainScript的函数。附加到一个空的游戏对象:
public class MainScript : MonoBehaviour
{
void OnEnable()
{
//Register to OnTriggered event
CollisionCallback.OnTriggered += TriggerDetected;
}
void OnDisable()
{
//Un-Register to OnTriggered event
CollisionCallback.OnTriggered -= TriggerDetected;
}
//This is invoked when trigger happens
void TriggerDetected(Collider2D collision)
{
Debug.Log("Trigger happened with: " + collision.name);
}
}
- 1 回答
- 0 关注
- 138 浏览
添加回答
举报