继续实现第二种:
消息派发类[MsgDispatcher2.cs]
public class MsgDispatcher2{
private Dictionary<string, Delegate> m_Msgs = new Dictionary<string, Delegate>();
private static MsgDispatcher2 m_Ins;
public static MsgDispatcher2 GetInstance() {
if (m_Ins == null) {
m_Ins = new MsgDispatcher2();
}
return m_Ins;
}
#region 订阅消息
public void Subscribe(string msgName,UnityAction handler) {
if (handler == null) {
Debug.LogError("SubscribeMsg : recevier == null");
return;
}
if (m_Msgs.ContainsKey(msgName)) {
Delegate dele = m_Msgs[msgName];
dele = Delegate.Remove(dele, handler); //避免重复先移除 在添加
dele = Delegate.Combine(dele, handler);
m_Msgs[msgName] = dele;
} else {
m_Msgs.Add(msgName, Delegate.Combine(handler));
}
}
public void Subscribe<T>(string msgName, UnityAction<T> handler) {
if (handler == null) {
Debug.LogError("SubscribeMsg : recevier == null");
return;
}
if (m_Msgs.ContainsKey(msgName)) {
Delegate dele = m_Msgs[msgName];
dele = Delegate.Remove(dele, handler);
dele = Delegate.Combine(dele, handler);
m_Msgs[msgName] = dele;
} else {
m_Msgs.Add(msgName, Delegate.Combine(handler));
}
}
public void Subscribe<T,U>(string msgName, UnityAction<T,U> handler) {
if (handler == null) {
Debug.LogError("SubscribeMsg : recevier == null");
return;
}
if (m_Msgs.ContainsKey(msgName)) {