最近有新项目需要和同事合作开发,他做UI 我做网络层,做着做着发现

如果我们要相对独立完成自己的开发任务,那我们的代码耦合得减少,不然

一个人代码有大改的时候,另一个人也要进行大幅修改,这样不便于后期开发维护。

然后做了一个简单的消息机制。

  总的来说是用了一个委托的方式解决的

  这是消息管理, 负责添加\删除 监听者,和分发消息的

using System.Collections.Generic;

public class MsgHandler
{ public delegate void DelMsgHandler(Msg msg); private static Dictionary<string, DelMsgHandler> mDicMsgs = new Dictionary<string, DelMsgHandler>(); /// <summary>
/// 添加监听者
/// </summary>
/// <param name="msgType"></param>
/// <param name="handler"></param>
public static void AddListener(string msgType, DelMsgHandler handler)
{
//判空
if (mDicMsgs == null) mDicMsgs = new Dictionary<string, DelMsgHandler>();
if (!mDicMsgs.ContainsKey(msgType)) mDicMsgs.Add(msgType, null);
//增加监听
mDicMsgs[msgType] += handler; }
/// <summary>
/// 去除对参数handler的监听
/// </summary>
/// <param name="msgType">消息类型</param>
/// <param name="handler">被监听方法</param>
public static void RemoveListener(string msgType, DelMsgHandler handler)
{
if (mDicMsgs != null && mDicMsgs.ContainsKey(msgType)) mDicMsgs[msgType] -= handler;
} /// <summary>
/// 清除所有的监听者
/// </summary>
public static void ClearAllListeners()
{
if (mDicMsgs != null) mDicMsgs.Clear();
} /// <summary>
/// 分发消息
/// </summary>
/// <param name="msgType">消息类型</param>
/// <param name="msg">分发的内容</param>
public static void SendMsg(string msgType, Msg msg)
{
DelMsgHandler handler; if (mDicMsgs != null && mDicMsgs.TryGetValue(msgType, out handler))
{ if (handler != null)
handler(msg);
}
} /// <summary>
/// 群发消息
/// </summary>
/// <param name="msg">消息内容</param>
public static void AllSendMsg(Msg msg)
{
foreach (var item in mDicMsgs)
{
item.Value(msg);
}
}
} public class Msg
{
public string Key { get; private set; }
public object Value { get; private set; }
public Msg(string key, object value)
{
this.Key = key;
this.Value = value;
}
}

  这是监听类, 负责监听

  

public class MsgReceive : MonoBehaviour
{ private void Awake()
{
MsgHandler.AddListener("MsgReceive", HandleMsg); } private void HandleMsg(Msg msg)
{ } private void OnDestroy()
{
MsgHandler.RemoveListener("MsgReceive", HandleMsg);
}
}

  

Unity 消息机制的更多相关文章

  1. Unity 消息发送机制 解析

    该博客,只为解析,解析,解析,已经整理好,已经整理好,已经整理好.代码核心原理套用网上最流行的那一套,也是最常用游戏开发适用的消息机制.这里面加上自己的一些优化,极大的修正(哈哈),实测,没问题.万一 ...

  2. Unity 游戏框架搭建 (五) 简易消息机制

    什么是消息机制? 23333333,让我先笑一会. 为什么用消息机制?   三个字,解!!!!耦!!!!合!!!!. 我的框架中的消息机制用例: 1.接收者 ``` using UnityEngine ...

  3. Unity 游戏框架搭建 2019 (四十六) 简易消息机制 & 集成到 MonoBehaviourSimplify 里

    在上一篇,我们接触了单例,使用单例解决了我们脚本之间访问的问题. 脚本之间访问其实有更好的方式. 我们先分下脚本访问脚本的几种形式. 第一种,A GameObject 是 B GameObject 的 ...

  4. Unity 游戏框架搭建 2019 (五十、五十一) 消息机制小结&MonoBehaviourSimplify 是框架?

    我们花了 5 篇文章学习了消息机制的方方面面.并且完成了一个简易消息机制,之后集成到了我们的 MonoBehaviourSimplify 里. 现在 MonoBehaviourSimplify 有一点 ...

  5. Unity消息简易框架 Advanced C# messenger

    Unity消息简易框架 Advanced C# messenger Unity C# 消息机制  [转载 雨凇MOMO博客] https://www.xuanyusong.com/archives/2 ...

  6. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  7. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  8. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  9. OSG消息机制之事件处理概述

    OSG的消息机制包括好多个头文件预定义及多个类. 首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了.前者处理OSG程序与用 ...

  10. [转]runtime 消息机制

    原文地址:http://www.jianshu.com/p/f6300eb3ec3d 一.关于runtime 之前在项目中有遇到过用runtime解决改变全局字体的问题,所以再一次感受到了runtim ...

随机推荐

  1. kafka数据顺序一致

    问题: kafka如何发送顺序消息 方案:kafka可以通过partitionKey,将某类消息写入同一个partition,一个partition只能对应一个消费线程,以保证数据有序. 也就是说生产 ...

  2. Si24R2F+ 无线发射芯片的主要特性及应用介绍

    Si24R2F+ 是一颗工作在 2.4GHz ISM 频段,专为低功耗无线场合设计,集成嵌入式发射基带的无线发射芯片.工作频率范围为 2400MHz-2525MHz,共有 126 个 1MHz 带宽的 ...

  3. hyper给linux扩容空间

    1.hyper操作 (1)关机后,在设置中,查看硬盘驱动器中的虚拟磁盘及编号, (2)编辑磁盘->查找磁盘中选中刚才的编号磁盘 (3)操作时扩容(大小填的不是增量 ,是扩容以后的空间) 2.li ...

  4. 2、k8s 基础环境安装

    3 k8s 环境配置 3.1 基础环境准备 所有机器执行 #各个机器设置自己的域名 我的设置为 hostnamectl set-hostname ks8-master.hostnamectl set- ...

  5. snapshot备份

    snapshot C: "h:\esd\$date_$hour_$minute_C.sna" -L0 -R -G snapshot64.exe C: "H:\ESD\$d ...

  6. go1.8-泛型

    基本思想: Parametric Polymorphism(形式)参数多态 基本语法 package main import "fmt" func printSlice[T any ...

  7. PY3多继承

    __author__ = "Alex Li"class A: def __init__(self): print("A")class B(A): pass #d ...

  8. python打包生成exe报错

    如图所示    如果出现的是这个问题可以可以考虑以下方法 首先卸载原先下载的 Pyinstaller pip uninstall pyinstaller 再执行以下代码,去github上下载 pip ...

  9. PR如何导出mp4格式的视频

    PR如何导出mp4格式的视频 PR是一款强大的视频处理软件,有时我们想导出mp4格式的视频,但好像找不到这种格式,具体怎么操作呢?PR如何导出mp4格式的视频? 1.打开PR,然后处理完视频后,点击左 ...

  10. matlab算符合集

    1.逻辑算符 1)且 : A & B -- 两个逻辑数组之间 逐个元素 进行逻辑"与"操作 AB可为矩阵. 首先判断表达式A的逻辑值,然后判断B,继而进行逻辑"与 ...