Unity3D中的SendMessage使用(消息傳遞的三種方法)


概述

Unity提供的消息推送機制可以非常方便我們的腳本開發,它實現的是一種偽監聽者模式,利用的是反射機制。

常用函數

關於消息推送,常用的函數有三個:”SendMessage“、”SendMessageUpwards“、”BroadcastMessage“。這些函數都是GameObject或者Component的成員函數,只要得到一個對象,然后調用它的這三個函數就可以進行一個消息的推送。也就是說比如獲得一個物體對象,然后調用gameObject.SendMessage(functionA...),這個方法就會遍歷自身的所有組件,只要一個組件中有函數functionA,那么functionA就會被調用,並且同時傳遞參數。

1.SendMessage

原型:

public void SendMessage( string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver ); 

作用:調用一個對象的methodName函數,這個函數可以是公有的也可以是私有的,后面跟一個可選參數(此參數作為傳入參數),最后面跟一個可選的設置參數(它有兩個選項,后面再講)。

2.SendMessageUpwards

原型:

public void SendMessageUpwards( string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver ); 

作用:它的作用和SendMessage類似,只不過它不僅會向當前對象推送一個消息,也會向這個對象的父對象推送這個消息(記住,是會遍歷所有父對象)。

3.BroadcastMessage

原型:

public void BroadcastMessage( string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver ); 

作用:這個函數的作用和SendMessageUpwards的作用正好相反,它不是推送消息給父對象,而是推送消息給所有的子對象,當然,也是會遍歷所有的子對象。

第三個參數使用:

SendMessageOptions.RequireReceiver //如果沒有找到相應函數,會報錯(默認是這個狀態) SendMessageOptions.DontRequireReceiver //即使沒有找到相應函數,也不會報錯,自動忽略 

gameObject.SendMessage

這個函數的目的就是為了調用其他腳本中的函數,也就是交互目的.
他會在指定的gameobject上所依附的腳本中針對函數名"string"去檢索. 找到后調用並傳送參數object

發送多個參數:

首先創建一個接受信息的腳本,並賦給一個物體Obj,

public class DJH_String : MonoBehaviour { void PrintMessage(object[] obj) { Debug.Log(obj[0]+""+obj[1]); } } 

接下來,來傳遞信息,代碼如下:

public class DJH_SendMessage : MonoBehaviour { private string msgValue1 = "Val1"; private string msgValue2 = "Val2"; public GameObject obj; void Start () { object[] message = new object[2]; message[0] = msgValue1; message[1] = msgValue2; obj.SendMessage("PrintMessage", message, SendMessageOptions.DontRequireReceiver); } } 



作者:完美風暴互動開發工作室
鏈接:https://www.jianshu.com/p/d314dc7c7777
來源:簡書


免責聲明!

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



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