unity 3種message訊息管理使用
BroadcastMessage 廣播訊息
function BroadcastMessage (methodName : string, parameter : object = null, options : SendMessageOptions = SendMessageOptions.RequireReceiver) : void
描述
在遊戲物體每一個MonoBehaviour和它的全部子物體上呼叫名為methodName的方法。
通俗的解釋:BroadcastMessage朝物體和所有子物體傳送訊息。
對一個物體及其所有子物體,進行訊息的廣播,如果其中任何子物體上貼有指令碼,而指令碼中有相應的處理此訊息的函式,則Invoke呼叫之。
接受訊息的此方法(函式)可以通過設定沒有引用參數列來忽略傳過來的訊息中的引數。如果選項Option中設定成了SendMessageOptions.RequireReceiver,那麼當沒有任何指令碼元件接受此訊息時,一個相應的錯誤會彈出來
C# JavaScript using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void ApplyDamage(float damage) {
print(damage);
}
public void Awake() {
BroadcastMessage("ApplyDamage", 5.0F);
}
}// Calls the function ApplyDamage with a value of 5
//呼叫函式 ApplyDamage 值為5
BroadcastMessage ("ApplyDamage", 5.0);
// Every script attached to the game object and all its children
// that has a ApplyDamage function will be called.
//附加到遊戲物體的每個指令碼和全部的子物體,有一個ApplyDamage函式將被呼叫
function ApplyDamage (damage : float) {
print (damage);
}
SendMessage 傳送訊息
function SendMessage (methodName : string, value : object = null, options : SendMessageOptions = SendMessageOptions.RequireReceiver) : void
描述
SendMessage朝本級別物體的多個指令碼傳送資訊,也就是向當前物件掛載的所有指令碼上面傳送訊息。
在遊戲物體每一個MonoBehaviour上呼叫名為methodName的方法。
接受此訊息的函式也可以沒有引數。如果選項Option中設定成了SendMessageOptions.RequireReceiver,那麼當沒有任何指令碼元件接受此訊息時,一個相應的錯誤會彈出來
C# JavaScript using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void ApplyDamage(float damage) {
print(damage);
}
public void Awake() {
SendMessage("ApplyDamage", 5.0F);
}
}// Calls the function ApplyDamage with a value of 5
//呼叫函式ApplyDamage 值為5
SendMessage ("ApplyDamage", 5.0);
// Every script attached to the game object
// that has a ApplyDamage function will be called.
//附加到遊戲物體的每個指令碼,有一個ApplyDamage函式將被呼叫
function ApplyDamage (damage : float) {
print (damage);
}
SendMessageUpwards 向上傳送訊息
function SendMessageUpwards (methodName : string, value : object = null, options : SendMessageOptions = SendMessageOptions.RequireReceiver) : void
Description描述
SendMessageUpwards朝物體和上級父物體傳送資訊。
在遊戲物體每一個MonoBehaviour和每一個behaviour的祖先上呼叫名為methodName的方法。
接受此訊息的函式也可以沒有引數。如果選項Option中設定成了SendMessageOptions.RequireReceiver,那麼當沒有任何指令碼元件接受此訊息時,一個相應的錯誤會彈出來
C# JavaScript using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void ApplyDamage(float damage) {
print(damage);
}
public void Awake() {
SendMessageUpwards("ApplyDamage", 5.0F);
}
}// Calls the function ApplyDamage with a value of 5
//呼叫函式ApplyDamage 值為5
SendMessageUpwards ("ApplyDamage", 5.0);
// Every script attached to the game object
// that has a ApplyDamage function will be called.
//附加到遊戲物體的每個指令碼,有一個ApplyDamage函式將被呼叫
function ApplyDamage (damage : float) {
print (damage);
}
測試方法執行
在unity中建立指令碼,一個用於傳送訊息,一個用於接收訊息
指令碼1 傳送訊息
using UnityEngine;
using System.Collections;
public class xx1 : MonoBehaviour
{
void OnGUI()
{
if (GUI.Button(new Rect(10, 10, 100, 50), "傳送1"))
{//this gameobjec
SendMessage("myTest");
}
if (GUI.Button(new Rect(10, 150, 100, 50), "傳送2"))
{//this gameobjec and it's childs
BroadcastMessage("myTest");
}
if (GUI.Button(new Rect(10, 200, 100, 50), "傳送3"))
{//this gameobjec‘parent
SendMessageUpwards("myTest");
}
}
指令碼2 接收訊息
using UnityEngine;
using System.Collections;
public class XXX : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnDrag(Vector2 delta)
{
Debug.Log("-------OnDrag--------");
}
public void myTest() {
Debug.Log("this is a methord:"+gameObject.name);
}
}
傳送1按鈕點選,sendMessage,執行結果
this is a methord:Plane1
也就是隻有plane1 收到訊息
傳送2按鈕點選,broadCaseMessage執行結果
傳送3按鈕點選,SendMessageUpwards執行結果
相關文章
- MQTT 遺囑訊息(Will Message)的使用MQQT
- Tkinter (12) 訊息部件 Message
- Unity遊戲框架設計之訊息管理器Unity遊戲框架
- RocketMQ的事務訊息處理【half-message】MQ
- 在Unity中實現一個簡單的訊息管理器Unity
- 訊息資料庫Message DB:PostgreSQL的事件儲存和訊息儲存 - Eventide Blog資料庫SQL事件IDE
- RocketMQ原始碼解析之訊息消費者(consume Message)MQ原始碼
- 【FreeRtos教程三】STM32 CubeMx——Message Queue(訊息佇列)佇列
- 【Unity3D】資源管理Unity3D
- [Unity 程式碼寫法整理]訊息機制(三)Unity
- Unity3D學習筆記3——Unity Shader的初步使用Unity3D筆記
- [譯] 在 Rails 中使用 Flash Message(即時資訊)AI
- Unity3d FingerGestures 使用 例子Unity3D
- 【Unity3D的四種座標系】Unity3D
- SMSSDK的Unity3D的兩種整合方式Unity3D
- SMSSDK的Unity3D的兩種整合方式-AndroidUnity3DAndroid
- 關於IPC-Message通訊
- Redis 中使用 list,streams,pub/sub 幾種方式實現訊息佇列Redis佇列
- Unity3d Android SDK接入解析(二)Unity3d Android SDK的設計與兩種接入方式Unity3DAndroid
- RocketMQ(6)---傳送普通訊息(三種方式)MQ
- 5G訊息的三種型別型別
- 延遲訊息的五種實現方案
- Rocket MQ 的三種訊息傳送(同步、非同步、單向)和訊息訂閱MQ非同步
- Python使用RocketMQ(訊息佇列)PythonMQ佇列
- 使用Redis做訊息佇列Redis佇列
- PHP Kafka 訊息佇列使用PHPKafka佇列
- Lazarus使用IPC收發訊息
- RabbitMQ訊息佇列(六):使用主題進行訊息分發MQ佇列
- 7種 實現web實時訊息推送的方案,7種!Web
- 好訊息 OR 壞訊息
- Unity——物件池管理Unity物件
- Fanuc Socket Message通訊第一講
- Redis 使用 List 實現訊息佇列能保證訊息可靠麼?Redis佇列
- git分支管理及git commit message規範GitMIT
- RabbitMQ實現延時訊息的兩種方法MQ
- Billboards 技術在Unity 中的幾種使用方法Unity
- react-native 使用leanclound訊息推送React
- 阿里雲訊息服務使用教程阿里