Unity的3種消息傳遞方法(SendMessage等)


為了方便多個物體間的消息傳達與接收,Unity中包含了幾種消息推送機制 :

分別為SendMessage、SendMessageUpwards、BroadcastMessage。

我們首先以SendMessage為例:

public void SendMessage(string methodName,object value,SendMessageOptions options);

可以看到它有三個參數,分別為“被調用目標方法的方法名”、“傳遞給目標方法的參數”、“當目標方法不存在時,是否告知開發者(是否打印錯誤)”

下面我們制作簡單的項目Demo測試:

新建場景並設置以下4個物體的層級關系如圖,其中Parent物體掛載“test1”和“test2”腳本,Grandparent 和 Child 以及 Other掛載“test2”腳本

 test1 和 test2腳本:(test1腳本包括消息發送和接收方法,test2腳本僅包括消息接收方法)

using UnityEngine;
public class test1 : MonoBehaviour {
    void Update()
    {
        if (Input.GetMouseButtonDown(0))//點擊鼠標左鍵執行以下操作 
        {
            SendMessage("Example1", 123, SendMessageOptions.DontRequireReceiver);//嘗試調用“Example1”方法
        }
    }
    void Example1(int i)
    {
         Debug.Log(name+"  :test1  :"+ i);
    }
}
using UnityEngine;
public class test2 : MonoBehaviour {
    void Example1(int i)
    {
         Debug.Log(name+"  :test2  :"+ i);
    }
}

運行程序並點擊鼠標左鍵,得到輸出結果如下 :(掛載test1的“Parent”物體接收到)

 

 可以得出結論:SendMessage的消息傳遞機制,僅對當前對象(自身)所掛載的所有腳本發送消息有效,對父物體及其子物體無效,對其他物體無效。

 

同樣的,我們分別編寫代碼對SendMessageUpwards、BroadcastMessage進行測試,

根據輸出結果,可分別得出結論:

SendMessageUpwards的消息傳遞機制,對當前對象(自身)及它的父物體所掛載的所有腳本發送消息有效,對其子物體無效,對其他物體無效。

BroadcastMessage的消息傳遞機制,與SendMessageUpwards正好相反,對當前對象(自身)及它的子物體所掛載的所有腳本發送消息有效,對其父物體無效,對其他物體無效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM