在網上隨便搜一搜資料就可以找到很多關於Mvc ,MVVM,StrangeIoc等有關顯示與數據分離的博客,很多大神也是講的蠻有道理的,但是這些框架理解起來有一定的難度,
這時候肯定有人說有現成的框架為什么不用,不用管它怎么實現的知道怎么用就行了,就我個人而言我也想用,比如去年unity開發者大會上unity開發者提出的uframe這個插件,我也曾具
體查過這個插件,大家對他的評價還是肯定的,但是國內用這個插件的人不是很多,並且全國所有網站上的文章有關於uframe的只有一個人寫過,我也按照博客上寫的具體進行操作了,可是
並沒有實現成功,可能是的版本問題,也可能是版本的問題...所以我就有了這篇博客,一篇關於事件在u3d中的一些應用
下面簡單的說一些我的思路!
ui的事件所有事件觸發全部在放在一個類里面,類似的聲音管理的全部放在一個類里,在外部類ui事件觸發的地方只需要調用事件即可,在其他地方綁定自己的事件
這樣簡單的邏輯就可以實現不用管理事件處理的內容
首先寫一個類定義所有的ui委托(也可以寫在其它類的外部)
1 /// <summary> 2 /// 無參數的ui事件 3 /// </summary> 4 public delegate void UIDelegateNoParameters(); 5 6 /// <summary> 7 /// 有參數的ui事件 8 /// </summary> 9 /// <typeparam name="T"></typeparam> 10 /// <param name="t"></param> 11 public delegate void UIDelegate<T>(T t);
下面是委托實現的單例類,用來定義事件和調用事件的函數
1 using UnityEngine; 2 3 /// <summary> 4 /// ui所有的事件 5 /// </summary> 6 public class UIEvent 7 { 8 #region 類的單例 9 private UIEvent() 10 { } 11 private static UIEvent _instance; 12 public static UIEvent GetInstance 13 { 14 get 15 { 16 if (_instance == null) 17 { 18 _instance = new UIEvent(); 19 } 20 21 return _instance; 22 } 23 24 } 25 #endregion 26 27 #region 第一個界面button事件 28 public event UIDelegateNoParameters ButDebug; 29 public void ButDebugImplement() 30 { 31 if (ButDebug != null) 32 { 33 ButDebug(); 34 } 35 else 36 { 37 Debug.Log("事件為空"); 38 } 39 } 40 #endregion 41 }
事件已經定義了,我們再來在場景里面定義一個button(先簡單的實現)
按鈕的怎么觸發就不用講了吧,不會的可以在下面評論或者去百度谷歌都是可以的
下面來看事件的觸發
1 public void OnClck() 2 { 3 UIEvent.GetInstance.ButDebugImplement(); 4 }
然后就是綁定事件了
1 void Start () 2 { 3 UIEvent.GetInstance.ButDebug += ck; 4 } 5 6 private void ck() 7 { 8 9 Debug.Log("執行了"); 10 }
代碼就是簡單的打印了一句話
現在我們來整理一下思路:首先我們定義了事件,,然后給事件綁定了函數.點擊按鈕的觸發了事件
思路so easy,,,不出意外的話最后應該是會打印出 執行了 這句話
那我們來看一下結果
結果很明顯和我們想的一樣