unity 委託事件簡單應用
上面程式碼所展示的問題呢就是:變數過多,呼叫複雜,可能會出現呼叫死迴圈,維護麻煩,邏輯混亂等等,那麼,我們就得想辦法解決了。本次主要講解事件的使用,需要有對於委託和事件的基本認識,如果有不太理解的朋友呢請參考這裡。
好了,假設我們現在需要設計一款計時器(Timer)的功能,它有一些基礎的事件:開始計時、暫停計時、停止計時(以下簡稱“計時器事件”)。並且要將這個事件告訴給A,那肯定會有人通過宣告一個變數A ,然後在計時器事件中進行呼叫。那現在突然需求改變了,一下子增加了B、C、D、E.....Z。這下怎麼辦呢? 肯定不能一個個放進去了吧。所以我們就需要有個機制讓計時器用大喇叭喊,這樣所有的人就能聽到了,這樣就引入了“事件”這個概念。那麼就有以下程式:
1、計時器:
然後,我們通過這三行程式碼就宣告瞭計時器的三種事件啦:
但是感覺還是不習慣哈,不要急,繼續往下看~
我為什麼要這樣進行賦值呢? 有人可能會說我多此一舉,但是我想解釋下的是,程式設計中切記不要編聰明的程式,可能你在編寫的時候很容易很簡單,但是等你開始維護你的專案的時候,你會發現非常棘手,你自己可能都看不懂你程式碼是什麼意思。
2、監聽者:
到這裡思路就已經很清晰明瞭,Timer作為事件的傳送者,Listener為其監聽者,依賴系統的功能廣播它的事件並呼叫“監聽”了這些事件的方法,這樣做就避免了上面提到問題,讓程式的耦合性降低了不少。
但是這樣還僅僅只是事件在專案的其中一種使用方式,大家也看出來了,感覺使用起來好像特別麻煩啊,每次使用一個事件都要先判斷事件為不為空,使用者還要使用“+=、-=”這樣的操作符,感覺理解起來好像也很複雜的樣子啊。
下面我們就要針對這個問題進行進一步優化啦,還沒緩過神來的朋友們先喝杯茶緩緩哈。
好,下面我們就要先解決下使用和理解複雜這個問題啦,所以我們先做點準備。
準備完啦,上面呢就是宣告瞭一個事件所需要的委託,一個事件介面,和計時器基本的事件的結構體啦。之所以要宣告介面再讓計時器事件結構體繼承它呢就是為了規範所有包含事件的結構體的基本框架啦,這下不會有人吐槽說:啊呀,為什麼我感覺我的專案裡從來沒用過介面呢。。。 這下不就用上了嘛~
我猜你們肯定也注意到了怎麼感覺這個介面有點熟悉呢? 是不是在哪裡見過呢? 對! 沒錯! 它和 UnityEvent還是比較像的,大家可能經常會在使用Button元件的時候用到這個方法,長得都差不多啦,是不是感覺很好用?
我們在TimerEvent中也宣告瞭AddListener(),用以更簡潔地註冊事件。其原理和上面那個是一樣的,只是進行了下封裝。相同的,在觸發事件上也進行了封裝,並檢測了是否有報空指標的問題,所以在之後使用中直接呼叫TriggerEvent()方法也更加放心啦,並且還有一個好處就是隱藏了其中的委託,也更加安全了。
好,準備工作做好了,我們現在把Timer的程式改改:
這樣我們就可以直接宣告計時器的事件啦,是不是一看TimerEvent就知道是啥啦:
是不是超級簡單~
然後在事件的監聽上呢直接AddListener()就好了,觸發事件也只需要TriggerEvent()就好了,媽媽再也不用擔心我報空指標啦~
接下來就是更改監聽器的程式了,簡直不能再簡單了。
相關文章
- js事件委託原理簡單介紹JS事件
- 來個簡單的事件委託 冒個泡事件
- javascript什麼是事件委託簡單介紹JavaScript事件
- 事件委託事件
- 委託、事件--委託例項篇事件
- 委託與事件-委託詳解(一)事件
- jQuery 事件委託jQuery事件
- 事件模型和事件委託事件模型
- 委託、Lambda表示式、事件系列02,什麼時候該用委託事件
- C# 事件委託C#事件
- C#事件委託事件
- 重中之重:委託與事件事件
- C# 委託事件C#事件
- wpf移除事件委託事件
- Js 事件原理與事件委託JS事件
- JS事件流和事件委託JS事件
- 委託、Lambda表示式、事件系列07,使用EventHandler委託事件
- JQuery7:事件委託jQuery事件
- C#委託與事件C#事件
- JavaScript 事件委託詳解JavaScript事件
- C# 事件 vs 委託C#事件
- C# - 委託與事件C#事件
- c# 委託和事件C#事件
- 委託與事件-事件詳解(二)事件
- 委託、Lambda表示式、事件系列01,委託是什麼,委託的基本用法,委託的Method和Target屬性事件
- 委託、Lambda表示式、事件系列05,Action委託與閉包事件
- js--事件流、事件委託、事件階段JS事件
- 委託、Lambda表示式、事件系列04,委託鏈是怎樣形成的, 多播委託, 呼叫委託鏈方法,委託鏈異常處理事件
- JavaScript 事件委託或者事件代理介紹JavaScript事件
- 事件的捕獲、冒泡、委託事件
- C# 之委託與事件C#事件
- javascript中的事件委託(代理)JavaScript事件
- jquery-中的事件委託jQuery事件
- Zepto事件委託的小坑事件
- js 事件的冒泡和委託JS事件
- 委託、Lambda表示式、事件系列03,從委託到Lamda表示式事件
- 事件委託---動態建立的元素新增事件事件
- kotlin代理模式就是這麼簡單(委託)Kotlin模式