Unity最简单的消息中心

        

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MessageCenter : MonoBehaviour {
    
    // 一个Dictionary,用于存储不同类型的消息所对应的事件委托,每个消息类型都会有多个订阅者
    private Dictionary<string, List<MessageHandler>> eventListeners = new Dictionary<string, List<MessageHandler>>();

    // 消息处理程序的委托
    public delegate void MessageHandler(object sender, Hashtable message);

    // 向消息中心注册监听器
    public void RegisterListener(string eventName, MessageHandler handler)
    {
        if(!eventListeners.ContainsKey(eventName)) { // 如果该事件没有任何订阅者
            eventListeners.Add(eventName, new List<MessageHandler>()); // 在字典中创建一个新的键值对
        }
        List<MessageHandler> listenerList = eventListeners[eventName]; // 获取该事件对应的所有订阅者列表
        if(!listenerList.Contains(handler)) { // 如果传入的处理程序还没有被注册
            listenerList.Add(handler); // 将其添加至订阅列表中
        }
    }

    // 从消息中心删除已注册的监听器
    public void UnregisterListener(string eventName, MessageHandler handler)
    {
        if(eventListeners.ContainsKey(eventName)) { // 如果该事件存在订阅者
            List<MessageHandler> listenerList = eventListeners[eventName];
            if(listenerList.Contains(handler)) { // 如果传入的处理程序在订阅列表中
                listenerList.Remove(handler); // 从列表中移除该处理程序
            }
        }
    }

    // 向消息中心广播事件
    public void SendMessage(string eventName, Hashtable message)
    {
        if(eventListeners.ContainsKey(eventName)) { // 如果该事件有订阅者
            List<MessageHandler> listenerList = eventListeners[eventName];
            foreach(MessageHandler handler in listenerList) { // 遍历所有订阅此事件的处理程序
                handler(this, message); // 调用消息处理委托
            }
        }
    }
}

        上述代码实现了一个基本的Unity消息中心,它允许您将不同的消息传递给不同的订阅者。在此代码中,我使用一个Dictionary来存储不同类型的消息所对应的事件委托,每个消息类型都可能有多个订阅者。

        为了向消息中心注册监听器,可以使用RegisterListener方法。如果事件未被任何人订阅,则会为其创建一个新的键值对。

        要从消息中心注销已注册的监听器,请使用UnregisterListener方法。

        最后,要向消息中心广播事件并通知所有订阅此事件的处理程序,请使用SendMessage方法。

        这种Unity消息中心非常灵活,可以轻松地扩展以满足您项目的特定需求。例如,您可能希望添加一些保护措施,例如只允许特定对象广播某些类型的消息。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值