亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢測/處理來自一個腳本或未附加到碰撞游戲對象的腳本的所有碰撞

檢測/處理來自一個腳本或未附加到碰撞游戲對象的腳本的所有碰撞

C#
LEATH 2022-01-16 14:33:49
我想控制玩家和道具之間的觸發器。我可以創建一個游戲對象并附加一個腳本來控制所有觸發事件,而不是為每個對象創建一個腳本嗎?喜歡void OnTriggerEnter2D(Collider2D collision){    switch(collision.gameObject.tag){        case "Move+":            FindObjectOfType<CreatePlayer>().movesRemain += 5;            break;    }}但這樣做時,玩家必須觸發包含腳本的游戲對象。
查看完整描述

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);

    }

}


查看完整回答
反對 回復 2022-01-16
  • 1 回答
  • 0 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號