1 回答

TA貢獻1842條經驗 獲得超13個贊
我可以創建一個游戲對象并附加一個腳本來控制所有觸發事件,而不是為每個對象創建一個腳本嗎?
為了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 關注
- 158 瀏覽
添加回答
舉報