unity3d 消息传递系统Messaging System

来源:互联网 发布:数据精灵后台授权 编辑:程序博客网 时间:2024/04/28 04:03

消息传递系统

新的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类脚本文档涵盖了其他形式的执行功能,如执行在孩子或父母。

0 0
原创粉丝点击