赞
踩
Unity的新UI系统引入了一种新的消息传递系统,旨在替代传统的SendMessage方法。这个系统使用纯C#编写,并通过自定义接口的方式,解决了SendMessage的一些局限性。新的消息系统不仅支持在目标GameObject上调用指定接口,还允许在整个GameObject层次结构传播消息。通过该系统,你可以轻松地传递自定义数据,并根据需求控制消息的传播范围(例如只在当前对象、其子对象或父对象中执行)。
在Unity的UntiyEngine.EventSystems命名空间中,有一个基础接口IEventSystemHandler。任何继承自这个接口的接口都可以作为消息接收器。
定义自定义消息接口
using UnityEngine.EventSystems;
public interface ICustomMessageTarget : IEventSystemHanlder
{
// 可以通过消息系统调用的函数
void Message1();
void Message2();
}
实现自定义消息接口
using UnityEngine;
using UnityEngine.EventSystems;
public class CustomMessageTarget : MonoBehaviour, ICustomMessageTarget
{
public void Message1()
{
Debug.Log("Message 1 received");
}
public void Message2()
{
Debug.Log("Message 2 received");
}
}
在这个示例中,我们定义了一个名为ICustomMessageTarget的接口,包含两个方法Message1和Message2。然后,我们在一个MonoBehaviour类中实现了该接口,这样这个组件就可以接收这些消息。
一旦你定义并实现了自定义消息接口,接下来就是发送消息。可以使用ExecuteEvents类的静态方法来发送消息。
发送消息
using UnityEngine; using UnityEngine.EventSystems; public class Messaging : MonoBehaviour { public GameObject target; void Update() { if(Input.GetKeyDown(KeyCode.Space)) { // 向目标GameObject发送Message1消息 ExecuteEvents.Execute<ICustomeMessageTarget>(target, null, (x, y) => x.Message1()); } } }
解释
ExecuteEvents类还提供了其他方法,允许你:
Unity的新消息传递系统通过使用接口和类型安全的方式来替代SendMessage,使得消息传递更加灵活和安全。通过ExecuteEvents类,你可以轻松地在目标GameObject上发送自定义消息,并控制消息的传播范围。这不仅适用于UI系统,也可以在游戏逻辑中广泛使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。