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.rhkb.cn/news/110991.html

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

相关文章

【具身智能】论文系列解读-RL-ViGen

1. RL-ViGen&#xff1a;视觉泛化的强化学习基准 RL-ViGen: A Reinforcement Learning Benchmark for Visual Generalization 0 摘要与总结 视觉强化学习&#xff08;Visual RL&#xff09;与高维观察相结合&#xff0c;一直面临着分布外泛化的长期挑战。尽管重点关注旨在解…

mysql 存储引擎系列 (二) Innodb 存储引擎 和 myisam 存储引擎

InnoDB 引擎 支持外键InnoDB是MySQL默认事务型引擎&#xff0c;它被设计用来处理大量的短期事务。可以确保事务的完整提交&#xff08;commit&#xff09;和回滚&#xff08;Rollback&#xff09;增加和查询&#xff0c;且数据量少的&#xff0c;MyIsam 高效&#xff0c; 除了…

Java“牵手”1688商品跨境属性数据,1688API接口申请指南

1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片&#xff0c;重量&#xff0c;详情描述等详细信息 。 获取商品详情接口API是一种用于…

私域流量的本质是什么?

私域流量的本质可以总结为以下几点&#xff1a; ①用户拥有权: 私域流量的关键是企业拥有对用户数据和互动的掌控权 ②长期价值: 建立持久的、互惠的关系&#xff0c;以便长期吸引、留住客户&#xff0c;并不断提高他们的价值。这与公域流量通常更侧重于短期转化的特性不同。…

双指针算法,基础算法实践,基本的算法的思想,双指针算法的实现

一&#xff0c;定义 双指针算法是一种常用于解决数组和链表问题的算法技巧。它的核心思想是使用两个指针在数据结构中按照一定的规则移动&#xff0c;从而达到快速搜索或处理数据的目的。这个技巧通常用于优化算法&#xff0c;降低时间复杂度&#xff0c;提高程序的执行效率。…

搭建微服务架构、实现服务调用

OpenFeign&#xff1a;Spring Cloud声明式服务调用组件 OpenFeign 全称 Spring Cloud OpenFeign&#xff0c;它是 Spring 官方推出的一种声明式服务调用与负载均衡组件&#xff0c;它的出现就是为了替代进入停更维护状态的 Feign。 OpenFeign 常用注解 使用 OpenFegin 进行远…

原生微信小程序使用 wxs;微信小程序使用 vant-weapp组件

1.原生微信小程序使用 wxs 1.内嵌 WXS 脚本 2. 定义外链 wxs 3. 使用外连wxs 在这里插入图片描述 2. 微信小程序使用 vant weapp 1.安装步骤 2. 安装包管理(package.json)文件的方法 操作顺序 &#xff1a;文档地址 如果使用 typescript 需要操作步骤3&#xff0c;否则不…

边缘计算网关是如何提高物联网的效率的?

随着物联网的持续发展&#xff0c;物联网应用的丰富和规模的扩大&#xff0c;带来了海量的数据处理、传输和计算需求。 传统的“数据中央处理”模式越来越难以适应物联网的扩展速度&#xff0c;在这一趋势下&#xff0c;边缘计算在物联网系统的部署运营中就发挥出了显著的增效…

React【React是什么?、创建项目 、React组件化、 JSX语法、条件渲染、列表渲染、事件处理】(一)

文章目录 React是什么&#xff1f; 为什么要学习React React开发前准备 创建React项目 React项目结构简介 React组件化 初识JSX 渲染JSX描述的页面 JSX语法 JSX的Class与Style属性 JSX生成的React元素 条件渲染&#xff08;一&#xff09; 条件渲染 &#xff0…

SpringMVC 写个 HelloWorld

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式&#xff1a;warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

工作中你会使用到 grpcurl 吗?

在平时的开发过程中&#xff0c;我们一般是 http 接口对外&#xff0c; grpc 接口对内部微服务 相信对于如何去请求 http 接口&#xff0c;大家都很熟悉了 如果是 inux 里面使用 curl 命令 在 windows 里面我们可以使用 postman 来请求接口 如果对于一个云上开发的接口的话&a…

设计模式之建造者模式

文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子&#xff1a;这一过程为打桩、砌墙、封顶房子有各种各样的&#xff0c;比如普通房&#xff0c;高楼…

嵌入式通用硬件模块设计——串口音频播放模块

模块功能展示&#xff1a; 串口音频控制模块 一、简介 方案为串口音频播放芯片功放芯片&#xff0c;口音频播放芯片IC为my1690-16s&#xff0c;功放为PAM8406。 1、my1690-16s 迈优科技的一款由串口控制的插卡MP3播放控制芯片&#xff0c;支持串口控制播放指定音频、音量调节…

兼具传统和新锐基因的极氪,是怎么做用户运营的?|新能源车专题研究

主笔&#xff1a;浣芳黛 出品&#xff1a;增长黑盒研究组 近几个月来&#xff0c;新能源车势头强劲&#xff0c;众多车企纷纷传出连月增长和再创新高的捷报&#xff0c;在当下整体经济复苏缓慢的映衬下&#xff0c;显得格外耀眼。 于是&#xff0c;增长黑盒近期针对新能源车企展…

QGIS学习2-QGIS设置中文界面、导出地图、修改显示投影、自定义投影等

1、设置中文界面 参照官方给的提示&#xff1a; https://qgis.org/en/site/getinvolved/translate.html 2、QGIS功能介绍 QGIS支持功能还是很全面的。 而且提供了很全面的插件库 https://plugins.qgis.org/plugins/ 3、工程文档介绍 可以直接从菜单栏对工程文档进行操作…

2023.8.25 关于 Selenium 常用 API 详解

目录 引言 打开页面 查找页面元素 输入文本 点击操作 提交操作 清除文本 获取文本和属性值 ​编辑 选择多个元素 获取页面标题和URL 等待操作 浏览器操作 多层框架定位 窗口操作 屏幕截图 下拉框元素选择操作 ​编辑 执行脚本 文件上传 引言 本文讲的所有…

java属性映射使用MapStruct的坑

目录 1.实体类和映射类只加注解Data 2.将Data换成getter和setter后build 3.那么此时我把getter和setter换成lombok的getter和setter 1.实体类和映射类只加注解Data 映射关系类 这个时候运行 提示源参数中不存在 注意这个文件夹 2.将Data换成getter和setter后build package c…

【C# Programming】编程入门:数组、操作符、控制流

目录 一、数组 1、数组的声明 1.1 一维数组声明&#xff1a; 1.2 多维数组声明&#xff1a; 2、数组的实例化和赋值 2.1 数组在声明时通过在花括号中使用以逗号分隔的数据项对数组赋值&#xff0c; 例如&#xff1a; 2.2 如果在声明后赋值&#xff0c;则需…

【JS案例】JS实现手风琴效果

JS案例手风琴 &#x1f31f;效果展示 &#x1f31f;HTML结构 &#x1f31f;CSS样式 &#x1f31f;实现思路 &#x1f31f;具体实现 1.绑定事件 2.自定义元素属性 3.切换菜单 &#x1f31f;完整JS代码 &#x1f31f;写在最后 &#x1f31f;效果展示 &#x1f31f;HTML…

Java课题笔记~ 综合案例

3.综合案例 3.1 功能介绍 以上是我们在综合案例要实现的功能。除了对数据的增删改查功能外&#xff0c;还有一些复杂的功能&#xff0c;如 批量删除、分页查询、条件查询 等功能 批量删除 功能&#xff1a;每条数据前都有复选框&#xff0c;当我选中多条数据并点击 批量删除 按…