任务6:事件中心模块

 

事件中心模式

 

1,事件中心

1 Private Dictionary<string,UnityAction<object>>  eventDic =  new Dictionary<string, UnityAction<object>>

 

2,添加事件监听

 1 /// <summary>
 2     /// 添加监听的事件
 3     /// </summary>
 4     /// <param name="name">事件的名字</param>
 5     /// <param name="action">准备用来处理事件的委托函数</param>
 6     public void AddEventListener(string name,UnityAction<object> action) 
 7     {
 8         //有没有对应的事件监听
 9         if (eventDic.ContainsKey(name))//有监听的情况
10         {
11             eventDic[name] += action;
12         }
13         else//没有监听的情况
14         {
15             eventDic.Add(name,action);
16         }
17     
18     }

 

3,监听事件触发

 1 /// <summary>
 2     /// 事件触发
 3     /// </summary>
 4     /// <param name="name">哪一个名字的事件触发了</param>
 5     public void EventTrigger(string name,object info) 
 6     {
 7 
 8         //有没有对应的事件监听
 9         if (eventDic.ContainsKey(name))//有监听的情况
10         {
11             eventDic[name].Invoke(info);
12 
13         }
14         
15     }

 

4,移除监听事件

 1 /// <summary>
 2     /// 移除对应的事件监听
 3     /// </summary>
 4     /// <param name="name">事件的名字</param>
 5     /// <param name="action">对应之前添加的委托函数</param>
 6     public void RemoveEventListener(string name,UnityAction<object> action) 
 7     {
 8         if (eventDic.ContainsKey(name))
 9         {
10             eventDic[name] -= action;
11         }
12     
13     }

 

5,

1 /// <summary>
2     /// 清空事件中心
3     /// 主要用在场景切换时
4     /// </summary>
5     public void ClearEvent() 
6     {
7         eventDic.Clear();
8     }

 

6,先触发事件(别的脚本之类的)

 1 private void Start()
 2     {
 3         Dead();
 4     }
 5 
 6     public void Dead() 
 7     {
 8         Debug.Log("怪物死亡");
 9 
10         //触发事件
11 
12         EventCenter.GetInstance().EventTrigger("MonsterDead",this);
13     }

 

 

7,再需要添加事件监听的位置添加监听点(别的脚本之类的)

 1 void Awake()
 2     {
 3         EventCenter.GetInstance().AddEventListener("MonsterDead", MonsterDeadDo);
 4     }
 5 
 6     // Update is called once per frame
 7     public void MonsterDeadDo(object info) 
 8     {
 9         Debug.Log("玩家的奖励"+ (info as Monster).name);
10     
11     }

 

8,添加完事件最后还要销毁事件

1 private void OnDestroy()
2     {
3         EventCenter.GetInstance().RemoveEventListener("MonsterDead", MonsterDeadDo);    
4     }

 

posted @ 2020-08-30 22:20  青梨  阅读(285)  评论(0编辑  收藏  举报