首页 > 其他分享 >【Unity】消息系统

【Unity】消息系统

时间:2024-02-17 11:22:54浏览次数:28  
标签:handle 系统 messageType Unity 消息 Message MessageDelHandle public

介绍

封装的消息机制

使用

注册消息

Reg(MessageType messageType, MessageDelHandle handle);
messageType : 注册消息类型
handle :消息传入时回调方法(该方法需拥有参数Message

注销消息

UnReg(MessageType messageType, MessageDelHandle handle);
messageType : 注销消息类型
handle :消息传入时回调方法(该方法需拥有参数Message

发送消息

SendMessage(int messageType, object body = null);
messageType : 发送消息类型
body :发送消息携带参数

代码

Message

    /// <summary>
    /// 消息类
    /// </summary>
    public class Message{
        public int Type //发送的消息类型
        {
            get;
            private set;
        }

        public object Body //消息主体
        {
            get;
            private set;
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="type">消息类型</param>
        public Message(int type){
            Type = type;
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="type">消息类型</param>
        /// <param name="body">消息体</param>
        public Message(int type, object body){
            Type = type;
            Body = body;
        }
    }

MessageType

    /// <summary>
    /// 消息的类型枚举
    /// </summary>
    public enum MessageType {
    }

MessageManager

    /// <summary>
    /// 消息中心
    /// </summary>
    public class MessageManager : Singleton<MessageManager> {

        // 消息委托
        public delegate void MessageDelHandle(Message message);

        // 消息字典
        private readonly Dictionary<int, MessageDelHandle> messageMap = new Dictionary<int, MessageDelHandle>();

        /// <summary>
        /// 构造函数
        /// </summary>
        public MessageManager() {
        }

        /// <summary>
        /// 注册监听
        /// </summary>
        public void Reg(int messageType, MessageDelHandle handle) {
            if (handle == null) {
                return;
            }

            // 把事件添加到对应的委托中
            messageMap.TryGetValue(messageType, out MessageDelHandle myHandle);
            messageMap[messageType] = (MessageDelHandle)Delegate.Combine(myHandle, handle);
        }

        /// <summary>
        /// 移除监听
        /// </summary>
        public void UnReg(int messageType, MessageDelHandle handle) {
            if (handle == null) {
                return;
            }
            messageMap[messageType] = (MessageDelHandle)Delegate.Remove(messageMap[messageType], handle);
        }

        /// <summary>
        /// 清空消息
        /// </summary>
        public void Clear() {
            messageMap.Clear();
        }

        public void SendMessage(int messageType, object body = null) {
            if (messageMap.TryGetValue(messageType, out var handle)) {
                Message evt = new Message(messageType, body);
                try {
                    if (handle != null) {
                        handle(evt);
                    }
                }
                catch (Exception e) {
                    Debug.LogError(string.Format("发送消息:{0}, {1}, {2}, {3}", evt.Type.ToString(), e.Message,
                        e.StackTrace, e));
                    throw;
                }
            }
        }

        #region MessageType

        public void Reg(MessageType messageType, MessageDelHandle handle) {
            //Debug.Log($"注册:{messageType}消息");
            Reg((int)messageType, handle);
        }

        public void UnReg(MessageType messageType, MessageDelHandle handle) {
            //Debug.Log($"注销:{messageType}消息");
            UnReg((int)messageType, handle);
        }

        public void SendMessage(MessageType messageType, object body = null) {
            SendMessage((int)messageType, body);
        }

        #endregion
    }

需实现单例 继承Singleton类

标签:handle,系统,messageType,Unity,消息,Message,MessageDelHandle,public
From: https://www.cnblogs.com/PuppetLazy/p/18017814

相关文章

  • Unity手机游戏性能优化系列:针对CPU端的性能调优
    做手机游戏开发的时,经常会遇到手机游戏的性能问题,手机游戏的性能问题可能有很多的方面,今天我们从CPU调优的角度来給大家介绍一下常用的CPU调优的一些经验和手段。这些经验和手段都有可能随着时间与环境的变化改变而改变,具体还是要以实际的为准,先定位性能问题,再上具体的手段。接下......
  • Unity资源管理系列:Unity 框架如何做好资源管理
    Unity资源管理需求分析作为架构师,在开始动手之前,先分析清楚需求,你才能设计出合理的方案,我们来分析一下Unity资源管理都有哪些需求,把需求想清楚了,设计是自然而然的事情。Unity资源管理主要需求:1:为开发与正式发布提供资源的加载/卸载;2:方便远程更新资源。3:带资源与不带资源......
  • 想设计一个高并发的消息中间件前,先熟悉一下这些知识点
    本文分享自华为云社区《面试必问|如何设计一款高并发的消息中间件?》,作者:冰河。消息中间件涉及的知识点要想设计一个具有高并发的消息中间件,那么首先就要了解下消息中间件涉及哪些具体的知识点。通常,设计一个良好的消息中间件最少需要满足如下条件:生产者、消费者模型。支持......
  • 探索系统科学方法的奥秘
    《系统科学方法概论》第三章为我们揭开了系统科学方法的神秘面纱,让我们得以一窥其理论框架和应用实践。在阅读这一章节后,我深刻感受到了系统科学方法的重要性和其在现代社会中的广泛应用。系统科学方法是一种跨学科的研究手段,它强调从整体出发,考虑各个组成部分之间的相互作用和联......
  • Unity 类胡闹厨房游戏 KitchenChaos 阶段1整理记录
    原教程地址:https://youtu.be/AmGSEH7QcDg部分代码:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassPlayerAnimator:MonoBehaviour{privateconststringIS_WALKING="IsWalking";[SerializeField]priv......
  • RabbitMQ 消息模型
         参考链接:  https://blog.csdn.net/qq_40991313/article/details/126801025?spm=1001.2014.3001.5501 3.5.3.总结描述下Direct交换机与Fanout交换机的差异?   Fanout交换机将消息路由给每一个与之绑定的队列   Direct交换机根据RoutingKey判断路由......
  • 吉特日化MES & 计算机化系统验证流程图
       作者:情缘  出处:http://www.cnblogs.com/qingyuan/关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作......
  • Qt环境Windows应用程序动态变更系统默认打印机
    有些工作环境安装有多个打印机,针对不同需求进行各种输出。如果是用QPrinter进行打印控制,可以通过setPrinterName确定使用哪一个打印机,但如果程序使用了第三方功能进行打印输出,比如通过QAxObject调用系统的文字处理直接输出,就可能会遇到无法明确指定哪一个打印机的问题。这时就需要......
  • 【记录】 unity插件 Addressables
    介绍Addressables是Unity官方推出的用于资源热更的系统,可在PackageManager里面下载。安装可在PackageManager里面下载、安装即可使用配置Addressables配置使用基础Addressables使用远程分发Addressables远程分发......
  • 2024年,我又开始用Linux桌面作为主力系统了~
    前言19年的时候我买了一个matebook14笔记本,配置是8代i5和8G内存,在当时看来作为轻薄本是够用的,但是现在已经2024年了,这内存让我想起来去年苹果的新款macmini,丐版三千多给了8G的配置,数码圈都沸腾了......