Unity 应用消息中心-MessageCenter

 Ps:主要解决耦合问题,把脚本之间的联系通过不同消息类型事件形式进行贯通

1.MessageCenter主脚本

2.DelegateEvent消息类型脚本

3.MC_Default_Data具体接收类脚本

 

 

 

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 事件管理
/// </summary>
public class MessageCenter : Singleton<MessageCenter>
{// 消息委托public delegate void messageDelHandle(MessagDeta message);// 消息字典public Dictionary<MessageCenterEventType, messageDelHandle> messageMap = new Dictionary<MessageCenterEventType, messageDelHandle>();/// <summary>/// 注册监听/// </summary>public void RegisterListener(MessageCenterEventType messageType, messageDelHandle handle){if (handle == null) return;// 把事件添加到对应的委托中messageDelHandle myHandle = null;messageMap.TryGetValue(messageType, out myHandle);if (myHandle != null){Delegate[] HandleList = myHandle.GetInvocationList();foreach (messageDelHandle item in HandleList){if (item == handle){Debug.LogError($"MessageCenter RegisterListener Type  ---  <color=yellow>{messageType.ToString()}</color>  ---  Has Registed Function  ---  <color=yellow>{handle.Method.Name}</color>  ---");return;}}}messageMap[messageType] = (messageDelHandle)Delegate.Combine(myHandle, handle);}/// <summary>/// 移除监听/// </summary>public void RemoveListener(MessageCenterEventType messageType, messageDelHandle handle){if (handle == null) return;messageMap[messageType] = (messageDelHandle)Delegate.Remove(messageMap[messageType], handle);}/// <summary>/// 清空消息/// </summary>public void Clear(){messageMap.Clear();}/// <summary>/// 发送消息/// </summary>/// <param name="messageName">消息类型 </param>/// <param name="body"> 发送消息主体 </param>public void SendMessage(MessageCenterEventType messageType, object body = null){messageDelHandle handle;if (messageMap.TryGetValue(messageType, out handle)){MessagDeta evt = new MessagDeta(messageType, body);try{if (handle != null){handle(evt);}}catch (System.Exception e){Debug.Log($"SendMessage:::{evt.Type.ToString()}:::{e.Message}:::{e.StackTrace}:::{e}");}}}#region 枚举类型接口#region MessageType//public void RegisterListener(MessageCenterEventType messageType, messageDelHandle handle)//{//    RegisterListener(messageType, handle);//}//public void RemoveListener(MessageCenterEventType messageType, messageDelHandle handle)//{//    RemoveListener(messageType, handle);//}//public void SendMessage(MessageCenterEventType messageType, object body = null)//{//    SendMessage(messageType, body);//}#endregion#region BattleEvent//public void RegisterListener(BattleEvent messageType, messageDelHandle handle)//{//    RegisterListener((int)messageType, handle);//}//public void RemoveListener(BattleEvent messageType, messageDelHandle handle)//{//    RemoveListener((int)messageType, handle);//}//public void SendMessage(BattleEvent messageType, object body = null)//{//    SendMessage((int)messageType, body);//}#endregion#region ProtocolEvent//public void RegisterListener(ProtocolEvent messageType, messageDelHandle handle)//{//    RegisterListener((int)messageType, handle);//}//public void RemoveListener(ProtocolEvent messageType, messageDelHandle handle)//{//    RemoveListener((int)messageType, handle);//}//public void SendMessage(ProtocolEvent messageType, object body = null)//{//    SendMessage((int)messageType, body);//}#endregion#endregion}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
/// <summary>
/// 消息类
/// </summary>
public class MessagDeta
{public MessageCenterEventType Type  //发送的消息类型{get;private set;}public object Data  //消息主体{get;private set;}/// <summary>/// 方法/// </summary>public Action action;/// <summary>/// 构造函数/// </summary>/// <param name="type">消息类型</param>/// <param name="body">消息体</param>public MessagDeta(MessageCenterEventType type, object data,Action action_=null){Type = type;Data = data;if (action_ != null){action = action_;}}
}
/// <summary>
/// 用户事件类型,必须按照类型,顺序添加,合理命名规范
/// </summary>
public enum MessageCenterEventType
{/// <summary>/// UI消息号开始/// </summary>UI_Start = 100000,UI_Fence_ChangeCameraView = 100101, //围栏UI界面切换主相机视角/// <summary>/// 实体消息号开始/// </summary>Entity_Start = 200000,//可以自己添加类型,每个类型预留100000接口Ground_Wire=300000,//主接线图接地线Ground_Wire_ding_wei = 300001,//主接线图接地线定位Ti_shi_tong_yong = 400001,//通用提示/// <summary>/// 其他杂类接口/// </summary>Other_Start = 900000
}

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class MC_Int_Data
{public int _num;
}public class MC_Uint_Data
{public uint _num;
}public class MC_Long_Data
{public long _num;
}public class MC_Ulong_Data
{public ulong _num;
}public class MC_Shotr_Data
{public short _num;
}public class MC_Ushotr_Data
{public ushort _num;
}public class MC_Float_Data
{public float _num;
}public class MC_Double_Data
{public double _num;
}public class MC_String_Data
{public string _Str;
}public class MC_Char_Data
{public char _char;
}public class MC_Bool_Data
{public bool _flag;
}public class MC_Object_Data
{public object _obj;
}
/// <summary>
/// 接地线控制
/// </summary>
public class Fan_Ground_Wire_Data
{public string id;//public bool active;//是否激活public Fan_Ground_Wire_Data(){}public Fan_Ground_Wire_Data(string ID,bool Active){id = ID;active = Active;}
}
/// <summary>
/// 接地线定位
/// </summary>
public class Fan_Ground_Wire_go
{public string id;// public Fan_Ground_Wire_go(string ID){id = ID;}
}
/// <summary>
/// 提示通用
/// </summary>
public class Ti_shi_tong_yong_c
{public string content;// public string text_icon;// public Action action;public Ti_shi_tong_yong_c(string content_,string text_icon_, Action action_){content = content_;text_icon = text_icon_;action = action_;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/53209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity 模型显示在UI上 并交互(点击、旋转、缩放)

项目工程&#xff1a;unity模型显示在UI上并交互&#xff08;点击、旋转、缩放&#xff09;资源-CSDN文库 1.在Assets创建 Render Texture&#xff08;下面会用到&#xff09;&#xff0c;根据需要设置Size 2.创建UIRawImage&#xff0c;并把Render Texture赋上 3.创建相机&am…

Docker安装并配置Pushgateway

Linux下安装Docker请参考&#xff1a;Linux安装Docker 简介 Pushgateway是Prometheus的一个组件&#xff0c;prometheus server默认是通过Exporter主动获取数据&#xff08;默认采取pull拉取数据&#xff09;&#xff0c;Pushgateway则是通过exporter主动方式推送数据到Pushg…

前端需要理解的CSS知识

CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;不是编程语言&#xff0c;而是用来描述 HTML 或 XML&#xff08;包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言&#xff09;文档的表现与展示效果的样式表语言。CSS3是CSS的最新标准&#xff0c;是…

mysql基础——认识索引

一、介绍 “索引”是为了能够更快地查询数据。比如一本书的目录&#xff0c;就是这本书的内容的索引&#xff0c;读者可以通过在目录中快速查找自己想要的内容&#xff0c;然后根据页码去找到具体的章节。 二、优缺点 优势&#xff1a;以快速检索&#xff0c;减少I/O次数&am…

【Go语言】基于Socket编程的P2P通信程序示例

Go语言的Socket编程实现为开发者提供了一种高效且强大的方式来实现网络通信。通过Go语言的并发模型和内置的网络库&#xff0c;如net包&#xff0c;开发者可以轻松地创建基于套接字的通信应用。Go语言的goroutine和channel机制使并发处理变得简单&#xff0c;能够轻松处理多个连…

U盘怎么加密?U盘加密方法有哪些?

U盘是我们生活和工作中最常用的移动储存设备&#xff0c;经常被用来存放各种重要数据&#xff0c;为了保证数据的安全&#xff0c;我们需要加密U盘。那么&#xff0c;U盘加密方法有哪些呢&#xff1f; U盘加密普通方法 如果你的U盘储存数据不多&#xff0c;并且对于加密的要求…

Linux 系统下 GDB 调试器的使用

文章目录 简介GDB 的介绍GDB 的使用 GDB 常用命令及示例查看相关操作断点相关操作运行相关操作变量相关操作分隔窗口操作 简介 GDB 的介绍 GDB 是 GNU 调试程序&#xff0c;是用来调试 C 和 C 程序的调试器。它可以让程序开发者在程序运行时观察程序的内部结构和内存的使用情况…

初阶c语言:趣味扫雷游戏

目录 前言 制作菜单 构建游戏选择框架 实现游戏功能 模块化编程&#xff1a;查看前节三子棋的内容 初始化雷区 ​编辑 优化棋盘 随机埋入地雷 点击后的决策 实现此功能代码 game&#xff08;&#xff09;&#xff1b;的安排 前言 《扫雷》是一款大众类的益智小游戏&…

java八股文面试[JVM]——元空间

JAVA8为什么要增加元空间 为什么要移除永久代&#xff1f; 知识来源&#xff1a; 【2023年面试】JVM8为什么要增加元空间_哔哩哔哩_bilibili

Django 简易PACS读片系统

1、Django中写一个后端接口&#xff0c;给HTML提供dicom文件接口的方式 1、首先创建django项目 1、下载安装跨域的包 pip3 install django-cors-headers2、使用pycharm创建一个Django项目 3、点击创建在另一个窗口&#xff0c;这个都无所谓&#xff0c;怎么都行&#xff0c;…

Hadoop Yarn 配置多队列的容量调度器

文章目录 配置多队列的容量调度器多队列查看 配置多队列的容量调度器 首先&#xff0c;我们进入 Hadoop 的配置文件目录中&#xff08;$HADOOP_HOME/etc/hadoop&#xff09;&#xff1b; 然后通过编辑容量调度器配置文件 capacity-scheduler.xml 来配置多队列的形式。 默认只…

安防监控平台EasyCVR视频汇聚平台增加首页告警类型的详细介绍

安防监控/视频集中存储/云存储EasyCVR视频汇聚平台&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等…

基于智和网管平台的网络安全运维解决方案

随着信息技术的快速发展及网络应用的广泛普及&#xff0c;企业在享受网络技术带来便利的同时&#xff0c;也受到日益严重的网络安全威胁。未来&#xff0c;企业信息系统规模和复杂程度将不断增大&#xff0c;对信息通信技术的应用也将不断深入&#xff0c;网络安全运维将成为愈…

浅谈小程序开源业务架构建设之路

一、业务介绍 1.1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态&#xff0c;我们的愿景是&#xff1a;定义移动时代最佳体验&#xff0c;建设智能小程序行业标准&#xff0c;打破孤岛&#xff0c;共建开源、开放、繁荣的小程序行业生态。百度智…

webrtc学习(七)-媒体协商

一.概述 媒体协商嘴主要的作用就是看通信双方都支持那些编解码器&#xff0c;这些编解码器又包含那些参数&#xff0c;比如音频的参数包括采样率&#xff0c;采样大小&#xff0c;通道数&#xff0c;对于视频的参数包括分辨率帧率等一系列参数&#xff0c;此外传输中用的payloa…

Linux 发行版 Debian 宣布支持龙芯 LoongArch 架构

近期&#xff0c;龙芯发布了 3A6000 桌面处理器&#xff0c;芯片的性能又一次大幅度提升&#xff0c;成为国产芯片的又一里程碑。 同期&#xff0c;LoongArch 架构的生态建设也迅速提升&#xff0c;开源网络引导固件 iPXE、QQ Linux 版、摩尔线程等软硬件都官宣支持龙芯 Loong…

VMware 修改ip地址 虚拟机静态ip设置 centos动态ip修改为静态ip地址 centos静态ip地址 vmware修改ip地址

虚拟机的centos服务器经常变换ip&#xff0c;测试起来有些麻烦&#xff0c;故将动态ip修改为静态ip 1. 查看vmware 虚拟机网络配置&#xff1a; 点击编辑&#xff0c;打开虚拟网络配置 2. 选中nat模式&#xff0c;点击nat设置&#xff0c;最终获取网关ip: 192.168.164.2 3. 进…

拒绝摆烂!C语言练习打卡第六天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4d…

Golang struct 结构体注意事项和使用细节

结构体所有字段在内存当中是连续的 type Point struct {x, y int }type Rect struct {leftUp, rightDown Point }func main() {//r1会在内存当中有四个整数r1 : Rect{leftUp: Point{x: 1,y: 2,},rightDown: Point{x: 3,y: 4,},}//r1有四个int&#xff0c;在内存当中是连续分布的…

基于Java+SpringBoot+Vue前后端分离社区智慧养老监护管理平台设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…