Unity3D中利用Action实现自己的消息管理(订阅/发布)类
时间: 2023-07-15 13:14:53 浏览: 70
在Unity3D中,可以使用C#中的Action和事件来实现自己的消息管理类。以下是一个示例:
```csharp
using System;
using System.Collections.Generic;
public class MessageManager
{
// 声明一个存储所有订阅者的字典
private Dictionary<string, Action> _subscribers = new Dictionary<string, Action>();
// 添加订阅者
public void Subscribe(string messageName, Action callback)
{
if (!_subscribers.ContainsKey(messageName))
{
_subscribers[messageName] = null;
}
_subscribers[messageName] += callback;
}
// 移除订阅者
public void Unsubscribe(string messageName, Action callback)
{
if (_subscribers.ContainsKey(messageName))
{
_subscribers[messageName] -= callback;
}
}
// 发送消息给所有订阅者
public void SendMessage(string messageName)
{
if (_subscribers.ContainsKey(messageName) && _subscribers[messageName] != null)
{
_subscribers[messageName].Invoke();
}
}
}
```
使用该类时,订阅者可以通过调用`Subscribe`方法来注册对某个消息的监听,并传入一个回调函数;发布者可以通过调用`SendMessage`方法来向所有订阅者发送消息;订阅者也可以通过调用`Unsubscribe`方法来取消对某个消息的监听。
例如,如果有一个名为`PlayerDead`的消息,发布者可以这样发送消息:
```csharp
messageManager.SendMessage("PlayerDead");
```
而订阅者可以这样注册对该消息的监听:
```csharp
messageManager.Subscribe("PlayerDead", OnPlayerDead);
```
其中,`OnPlayerDead`是一个回调函数,用于在收到该消息时执行一些操作。例如:
```csharp
private void OnPlayerDead()
{
Debug.Log("玩家死亡!");
}
```
阅读全文