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

概述

Unity提供的消息推送機制能夠很是方便咱們的腳本開發,它實現的是一種僞監聽者模式,利用的是反射機制。函數

經常使用函數

關於消息推送,經常使用的函數有三個:」SendMessage「、」SendMessageUpwards「、」BroadcastMessage「。這些函數都是GameObject或者Component的成員函數,只要獲得一個對象,而後調用它的這三個函數就能夠進行一個消息的推送。也就是說好比得到一個物體對象,而後調用gameObject.SendMessage(functionA...),這個方法就會遍歷自身的全部組件,只要一個組件中有函數functionA,那麼functionA就會被調用,而且同時傳遞參數。ui

1.SendMessage

原型:spa

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

做用:調用一個對象的methodName函數,這個函數能夠是公有的也能夠是私有的,後面跟一個可選參數(此參數做爲傳入參數),最後面跟一個可選的設置參數(它有兩個選項,後面再講)。pwa

2.SendMessageUpwards

原型:code

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"去檢索. 找到後調用並傳送參數objectstring

發送多個參數:

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

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來源:簡書

相關文章
相關標籤/搜索