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
- Android訊息機制Message訊息池Android
- Unity遊戲框架設計之訊息管理器Unity遊戲框架
- WebSphere Message Broker 中使用者出口跟蹤訊息Web
- weblogic jms訊息狀態messageWeb
- 訊息佇列(Message Queue)基本概念佇列
- ActiveMQ 中的訊息遊標(Message cursors)MQ
- Android 安全加密:訊息摘要Message DigestAndroid加密
- Android安全加密:訊息摘要Message DigestAndroid加密
- Android 訊息處理機制:Handler|MessageAndroid
- 在Unity中實現一個簡單的訊息管理器Unity
- [Unity3d]unity中http通訊Unity3DHTTP
- RocketMQ的事務訊息處理【half-message】MQ
- 訊息資料庫Message DB:PostgreSQL的事件儲存和訊息儲存 - Eventide Blog資料庫SQL事件IDE
- [Unity 程式碼寫法整理]訊息機制(三)Unity
- RocketMQ原始碼解析之訊息消費者(consume Message)MQ原始碼
- 【Unity3D】資源管理Unity3D
- Android訊息處理機制(Handler、Looper、MessageQueue與Message)AndroidOOP
- 【FreeRtos教程三】STM32 CubeMx——Message Queue(訊息佇列)佇列
- WCF技術剖析之十八:訊息契約(Message Contract)和基於訊息契約的序列化
- 使用WM_COPYDATA訊息通訊
- 遠端呼叫服務(RPC)和基於訊息的通訊(Message Queue)對比RPC
- 歡迎使用ilink message server:國內第一個獨立的JMS訊息中介軟體Server
- Unity3D學習筆記3——Unity Shader的初步使用Unity3D筆記
- 【Unity3D的四種座標系】Unity3D
- Chrome瀏覽器擴充套件開發系列之十三:訊息傳遞MessageChrome瀏覽器套件
- RocketMQ(6)---傳送普通訊息(三種方式)MQ
- 5G訊息的三種型別型別
- 延遲訊息的五種實現方案
- Rocket MQ 的三種訊息傳送(同步、非同步、單向)和訊息訂閱MQ非同步
- 截獲與管理Windows的訊息 (轉)Windows
- RabbitMQ訊息佇列(六):使用主題進行訊息分發MQ佇列
- PHP Kafka 訊息佇列使用PHPKafka佇列
- 使用Redis做訊息佇列Redis佇列
- 使用redis進行訊息推送Redis
- Window 訊息大全使用詳解
- Lazarus使用IPC收發訊息
- SMSSDK的Unity3D的兩種整合方式Unity3D