Unity3D中利用Action实现自己的消息管理(订阅/发布)类
时间: 2023-07-15 11:14:53 浏览: 73
Unity3D源码 Action-RPG Starter Kit 6.01 动作游戏模板
5星 · 资源好评率100%
在Unity3D中实现自己的消息管理类可以使用C#中的委托和事件来实现。具体实现步骤如下:
1. 定义一个消息管理器类,该类包含一个字典,用于存储不同类型的消息对应的事件委托。
```
public class MessageManager
{
private Dictionary<string, Action> events = new Dictionary<string, Action>();
public void AddListener(string eventName, Action listener)
{
if (!events.ContainsKey(eventName))
{
events.Add(eventName, null);
}
events[eventName] += listener;
}
public void RemoveListener(string eventName, Action listener)
{
if (events.ContainsKey(eventName))
{
events[eventName] -= listener;
}
}
public void TriggerEvent(string eventName)
{
Action action;
if (events.TryGetValue(eventName, out action))
{
if (action != null)
{
action.Invoke();
}
}
}
}
```
2. 在需要订阅消息的类中,定义一个方法,该方法将被赋值给消息管理器中的委托。
```
public class Subscriber
{
private void OnEventTriggered()
{
// 处理消息
}
}
```
3. 在需要发布消息的类中,获取消息管理器的实例,然后调用其AddListener方法,将需要订阅该消息的方法传入。
```
public class Publisher
{
private MessageManager messageManager;
private void Start()
{
messageManager = new MessageManager();
messageManager.AddListener("eventName", OnEventTriggered);
}
private void OnEventTriggered()
{
messageManager.TriggerEvent("eventName");
}
}
```
4. 在需要取消订阅消息的类中,获取消息管理器的实例,然后调用其RemoveListener方法,将需要取消订阅该消息的方法传入。
```
public class Unsubscriber
{
private MessageManager messageManager;
private void Start()
{
messageManager = new MessageManager();
messageManager.AddListener("eventName", OnEventTriggered);
}
private void OnDestroy()
{
messageManager.RemoveListener("eventName", OnEventTriggered);
}
private void OnEventTriggered()
{
// 处理消息
}
}
```
通过以上步骤,就可以实现一个简单的消息管理类,用于实现订阅/发布模式。
阅读全文