天天看點

unity3d 消息傳遞系統Messaging System消息傳遞系統

消息傳遞系統

新的UI設計的系統使用一個消息傳遞系統來取代SendMessage。 該系統是純c#和旨在解決與SendMessage存在的一些問題。 使用自定義接口,可以實作系統工作在MonoBehaviour表明元件能夠接收一個回調消息傳遞系統。 當調用目标指定GameObject;所有元件的調用将GameObject實作指定的接口,調用發出。 消息傳遞系統允許自定義使用者資料被傳遞,以及多大程度上通過GameObject層次事件應該傳播;這是應該指定GameObject隻是執行,或者它也應該執行的孩子和父母。 除了這個消息傳遞架構提供了輔助函數搜尋并發現GameObjects實作給定的消息傳遞接口。

消息傳遞系統是通用的,設計用于不僅由UI系統也由一般的遊戲代碼。 添加自定義消息事件比較簡單,他們将使用相同的架構,對所有事件處理UI系統使用。

如何定義一個自定義的消息?

如果你希望定義一個自定義消息是相對簡單的。 UnityEngine。 EventSystems名稱空間都有一個基本的界面稱為“IEventSystemHandler”。 任何從這可以被認為是通過消息傳遞系統接收事件的目标。

public interface ICustomMessageTarget : IEventSystemHandler
{
    // functions that can be called via the messaging system
    void Message1();
    void Message2();
}
           

一旦定義該接口由MonoBehaviour就可以實作。 當它定義函數實作将如果執行給定的消息釋出在此MonoBehaviours GameObject。

public class CustomMessageTarget : MonoBehaviour, ICustomMessageTarget
{
    public void Message1()
    {
        Debug.Log ("Message 1 received");
    }

    public void Message2()
    {
        Debug.Log ("Message 2 received");
    }
}
           

現在存在一個腳本,可以接收消息我們需要發出消息。 通常這是在回應一些松散耦合的事件發生。 例如,在UI系統我們問題事件諸如PointerEnter PointerExit,以及各種其他的事情可以發生在響應使用者輸入到應用程式中。

靜态的助手類發送消息的存在。 作為參數需要一個目标對象的資訊,一些特定于使用者的資料,和一個映射到特定的函數的函子的消息接口你希望的目标。

ExecuteEvents.Execute<ICustomMessageTarget>(target, null, (x,y)=>x.Message1());
           

這段代碼将執行函數将消息GameObject目标上的任何元件實作ICustomMessageTarget接口。 ExecuteEvents類腳本文檔涵蓋了其他形式的執行功能,如執行在孩子或父母。

繼續閱讀