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