Message
消息类
public class Message
{
//网络游戏中为了提高性能,消息类型越小越好
//类型:UI,角色,音频
public byte type;
//命令
public int Command;
//参数
public object Content;
public Message(byte type,int Command,object Content)
{
this.type = type;
this.Command = Command;
this.Content = Content;
}
}
public class MessageType
{
//类型
public static byte Type_Audio=1;
public static byte Type_UI = 2;
public static byte Type_Player = 3;
//声音命令
public static int Audio_PlaySound = 100;
public static int Audio_StopSound = 101;
//UI命令
public static int UI_AddHP = 200;
public static int UI_ShowPanel = 201;
}
MonoBase
功能脚本
public class MonoBase : MonoBehaviour
{
public virtual void ReceiveMessage(Message message)
{
}
}
ManagerBase
管理类
public abstract class ManagerBase : danli<ManagerBase>
{
//管理的功能模块
public List<MonoBase> Monos = new List<MonoBase>();
//功能脚本注册
public void Register(MonoBase monoBase)
{
//如果功能模块不在列表中,就添加
if (!Monos.Contains(monoBase)){
Monos.Add(monoBase);
}
}
public virtual void ReceiveMessage(Message message)
{
//如果消息类型不匹配,不向下传递
if (GetMessageType()!=message.type)
{
return;
}
//匹配
else
{
foreach(var Mono in Monos)
{
Mono.ReceiveMessage(message);
}
}
}
//设置当前管理类接收的消息类型
public abstract byte GetMessageType();
}
MessageCenter
消息中心
public class MessageCenter : danli<MessageCenter>
{
//管理类集合
public static List<ManagerBase> Managers = new List<ManagerBase>();
//管理类集合
public void Register(ManagerBase manager)
{
if (!Managers.Contains(manager))
{
Managers.Add(manager);
}
}
//发送消息
public void SendCustomMessage(Message message)
{
foreach(var manager in Managers)
{
manager.ReceiveMessage(message);
}
}
}