消息中心是消息的转发派发的中转站 话不多说上代码
消息中心是泛型单利的代码 如果不想搞单利 用静态效果一样自己玩完全够用的
using System;
using System.Collections.Generic;
public class MessageManager :Single<MessageManager>
{
Dictionary<int,Action<object>> dic=new Dictionary<int,Action<object>>();
public void Add(int id, Action<object> action)
{
if(dic.ContainsKey(id))
{
dic[id] += action;
}
else
{
dic.Add(id, action);
}
}
public void Remove(int id,Action<object> action)
{
if (dic.ContainsKey(id))
{
dic[id] -= action;
if (dic[id] == null)
{
dic.Remove(id);
}
}
}
public void Send(int id, params object[] arr)
{
if(dic.ContainsKey(id))
{
dic[id](arr);
}
}
}
单利本来不想发的因为之前发过 但是想了想还是发了吧
上代码
public class Single<T> where T : class, new()
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
_instance = new T();
}
return _instance;
}
}
}
怎么用也发一下吧 哎 主要就是发送和转发
using UnityEngine;
using UnityEngine.UI;
public class AnimMgr : MonoBehaviour
{
RuntimeAnimatorController runtimeAnimator;
public Button button;
void Start()
{
MessageManager.Instance.Add(1001, Skill);
button.onClick.AddListener(() =>
{
MessageManager.Instance.Send(1001, 0);
});
}
private void Skill(object obj)
{
object[] arr=obj as object[];
int skillid = (int)arr[0];
string path = SkillMgr.Instance.skillDic[skillid].animpath;
SetAnim(path);
}
private void SetAnim(string path)
{
AnimationClip clip = Resources.Load<AnimationClip>(path);
AnimatorOverrideController animatorOverrideController = new AnimatorOverrideController();
animatorOverrideController.runtimeAnimatorController = runtimeAnimator;
animatorOverrideController["Default"] = clip;
GetComponent<Animator>().runtimeAnimatorController = null;
GetComponent<Animator>().runtimeAnimatorController = animatorOverrideController;
GetComponent<Animator>().Play("Default");
//float time = clip.length;
//overrideController["Take 002"] = clip;
//animator.SetBool("Play", true);
}
}