免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Unity實現(xiàn)自己的事件機制(簡單實現(xiàn))

事件機制廣泛應用于mvc模式中,靈活的事件機制能夠彌補Unity中的一些缺陷,比如協(xié)程的執(zhí)行。因為協(xié)程不能返回值,也不能通過out或者ref傳遞。通過事件機制,可以知道協(xié)程執(zhí)行進度并且返回執(zhí)行結果。當然,這只是個舉例,也只是我習慣用的一種方式。如果有更好的實現(xiàn)方式,希望不吝賜教。


所有要接受事件的腳本,都要繼承這個事件手柄的接口

[csharp] view plain copy
  1. /// <summary>  
  2. /// 事件手柄  
  3. /// </summary>  
  4. public interface IEventHandler {  
  5.   
  6.     void OnEvent(string type,object data);  
  7. }  


以下是EventManager的主要內容,實現(xiàn)了注冊監(jiān)聽,移除監(jiān)聽,派發(fā)事件等基本方法。只要在事件派發(fā)前,注冊好就可以運行了!

[csharp] view plain copy
  1. using UnityEngine;  
  2. using System.Collections.Generic;  
  3.   
  4. public class EventManager {  
  5.   
  6.     private static EventManager instance;  
  7.   
  8.     private Dictionary<string, List<IEventHandler>> dicHandler;  
  9.   
  10.     private EventManager()  
  11.     {  
  12.         dicHandler = new Dictionary<string, List<IEventHandler>>();  
  13.     }  
  14.   
  15.     public static EventManager GetInstance()  
  16.     {  
  17.         if (instance == null)  
  18.         {  
  19.             instance = new EventManager();  
  20.         }  
  21.         return instance;  
  22.     }  
  23.   
  24.     /// <summary>  
  25.     /// 注冊事件監(jiān)聽  
  26.     /// </summary>  
  27.     /// <param name="type">監(jiān)聽類型</param>  
  28.     /// <param name="listher">監(jiān)聽對象</param>  
  29.     public void AddEventListener(string type, IEventHandler listher)  
  30.     {  
  31.         if (!dicHandler.ContainsKey(type))  
  32.         {  
  33.             dicHandler.Add(type,new List<IEventHandler>());  
  34.         }  
  35.         dicHandler[type].Add(listher);  
  36.     }  
  37.   
  38.     /// <summary>  
  39.     /// 移除對type的所有監(jiān)聽  
  40.     /// </summary>  
  41.     /// <param name="type"></param>  
  42.     public void RemoveEventListener(string type)  
  43.     {  
  44.         if (dicHandler.ContainsKey(type))  
  45.         {  
  46.             dicHandler.Remove(type);  
  47.         }  
  48.     }  
  49.   
  50.     /// <summary>  
  51.     /// 移除監(jiān)聽者的所有監(jiān)聽  
  52.     /// </summary>  
  53.     /// <param name="listener">監(jiān)聽者</param>  
  54.     public void RemoveEventListener(IEventHandler listener)  
  55.     {  
  56.         foreach (var item in dicHandler)  
  57.         {  
  58.             if (item.Value.Contains(listener))  
  59.             {  
  60.                 item.Value.Remove(listener);  
  61.             }  
  62.         }  
  63.     }  
  64.   
  65.     /// <summary>  
  66.     /// 清空所有監(jiān)聽事件  
  67.     /// </summary>  
  68.     public void ClearEventListener()  
  69.     {  
  70.         Debug.Log("清空對所有所有所有事件的監(jiān)聽");  
  71.         if (dicHandler!=null)  
  72.         {  
  73.             dicHandler.Clear();  
  74.         }  
  75.     }  
  76.   
  77.     /// <summary>  
  78.     /// 派發(fā)事件  
  79.     /// </summary>  
  80.     /// <param name="type">事件類型</param>  
  81.     /// <param name="data">事件傳達的數(shù)據</param>  
  82.     public void DispachEvent(string type, object data)  
  83.     {  
  84.         if (!dicHandler.ContainsKey(type))  
  85.         {  
  86.             Debug.Log("Did not add any IEventHandler of " + type + " in EventManager!");  
  87.             return;  
  88.         }  
  89.   
  90.         List<IEventHandler> list = dicHandler[type];  
  91.         for (int i = 0; i < list.Count; i++)  
  92.         {  
  93.             list[i].OnEvent(type,data);  
  94.         }  
  95.     }  
  96. }  

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
重學 Java 設計模式:實戰(zhàn)觀察者模式「模擬類似小客車指標搖號過程,監(jiān)聽消息通知用戶中簽場景」
DDD~領域事件與事件總線
nopcommerce中文網 | .NET編程之事件總線(Event Bus)知多少?
SOA架構中的事件驅動服務
[分享] As3 事件集中管理類,簡化Event操作
監(jiān)聽事件綁定(addEventListener、attachEvent)和移除(removeEventListener、detachEvent)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服