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;
}