using System.Collections; using System.Collections.Generic; using UnityEngine; public class MessageCenter{ //管理类集合 public static List<MonoBase> Messages = new List<MonoBase>(); //发送消息 public static void SendMessage(Message msg) { foreach (MonoBase mb in Messages) { mb.ReceiveMessage(msg); } } public static void SendMessage(byte type,int command,object content) { Message msg = new Message(type,command,content); SendMessage(msg); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ManagerBase<T> : MonoBase where T:MonoBase { public static T Instance; //管理的消息接收者 public List<MonoBase> ReceiveList = new List<MonoBase>(); //当前管理类接收的消息类型 protected byte messageType; protected virtual void Awake() { Instance = this as T; //设置消息类型 messageType = SetMessageType(); //将当前的管理类添加到消息中心列表中 MessageCenter.Messages.Add(this); } //必须实现,返回当前管理类的消息类型 protected virtual byte SetMessageType() { return MessageType.Type_UI; } //注册消息监听 public void RegisterReceiver(MonoBase mb) { if (!ReceiveList.Contains(mb)) { ReceiveList.Add(mb); } } //接收到了消息,并且向下分发消息 public override void ReceiveMessage(Message message) { base.ReceiveMessage(message); //如果接收到的消息类型不匹配,则不向下分发消息 if (message.Type!=messageType) { return; } foreach (MonoBase mb in ReceiveList) { mb.ReceiveMessage(message); } } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MonoBase : MonoBehaviour { //发送消息 public void SendCustomMessage(Message msg) { MessageCenter.SendMessage(msg); } public void SendCustomMessage(byte type, int command, object content) { MessageCenter.SendMessage(type,command,content); } //接收消息 public virtual void ReceiveMessage(Message message) { } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Message { //类型 public byte Type; //命令 public int Command; //参数 public object Content; //自己的构造 public Message() { } //用起来的构造 public Message(byte type, int command, object content) { Type = type; Command = command; Content = content; } } //消息类型 public class MessageType { public static byte Type_Audio = 1; public static byte Type_UI = 2; public static int Audio_PlaySound = 100; public static int Audio_playMusic = 101; public static int Audio_StopMusic = 102; public static int Audio_ChangeVolume = 103; public static int UI_ShowPanel = 200; public static int UI_AddScore = 201; public static int UI_ShowShop = 202; }