1 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
我可以創(chuàng)建一個游戲?qū)ο蟛⒏郊右粋€腳本來控制所有觸發(fā)事件,而不是為每個對象創(chuàng)建一個腳本嗎?
為了OnTriggerEnter2D被調(diào)用,包含它的腳本必須附加到將涉及碰撞的游戲?qū)ο?。如果不這樣做,它將不會被調(diào)用。
如果您需要一個通用腳本來處理所有碰撞檢測,則必須使用事件和委托來執(zhí)行此操作。創(chuàng)建一個delegate命名CollisionAction然后從該delegate命名的事件OnTriggered。當(dāng)OnTriggerEnter2D被調(diào)用時,調(diào)用該OnTriggered事件。將它附加到您想要檢測碰撞的所有游戲?qū)ο笊稀?/p>
public class CollisionCallback : MonoBehaviour
{
public delegate void CollisionAction(Collider2D collision);
public static event CollisionAction OnTriggered;
void OnTriggerEnter2D(Collider2D collision)
{
if (OnTriggered != null)
OnTriggered(collision);
}
}
現(xiàn)在,在要用于處理碰撞的主腳本上,在函數(shù)中注冊O(shè)nTriggered事件并在OnEnable函數(shù)中取消注冊O(shè)nDisable。在腳本OnTriggerEnter2D中調(diào)用時,將調(diào)用 中注冊CollisionCallbackMainScript的函數(shù)。附加到一個空的游戲?qū)ο螅?/p>
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 關(guān)注
- 157 瀏覽
添加回答
舉報