ToLua學習筆記,使用委託,監聽UGUI元件事件

ToLua學習筆記,使用委託,監聽UGUI元件事件

首先在Hierarchy面板建立一個Button:

我需要把這個Button物件傳遞到lua指令碼中,以便訪問,所以建立UIManager指令碼如上圖。內容如下:

UIManager在執行時會自動獲取Button的引用,然後在LuaHelper中新增如下程式碼:

只是為了再lua指令碼中通過LuaHelper訪問到UI管理器。

然後參考巨集哥的部落格文章一文章二,新增EventTriggerListener.cs:

此指令碼的目的其實只是為了能像NGUI一樣註冊回撥函式,並且這個指令碼是通用的,一旦編寫基本不會變化,所以方便熱更新。

把之前新增過的東西都註冊進去:


一旦註冊進去,EventTriggerListener中的委託和事件就會被自動註冊,如下所示:

編寫main.lua指令碼,內容如下:

清理,構建,執行Unity,用滑鼠點選螢幕上的按鈕,結果如下:

其實不論是LuaHelper也好UIManager也好,都只是為lua訪問c#中的某些元素提供方便,這些可以自由定義,只要能滿足要求。

這裡我是事先就在Unity中建立好了Button,所以可以直接訪問到,但實際專案中,一般都是動態建立元件,動態新增,這個時候就需要兩個管理器了,一個是UIManager,管理開關,一個是ResManager管理載入做好的UI預製體,通過UIManager能自動獲取到任何當前已開啟的UI元件物件,這就好註冊事件了。

這樣,所有的操作都可以在lua指令碼中進行,方便熱更新。

另外有註冊事件就要有移除事件,所以可以再封裝一下,用來判斷是否有該回撥,以便移除。

請注意:LuaHelper內容我有做修改,Global是我自定義的全域性管理指令碼,整個ToLua框架原有程式碼我做了精簡,大家不用非要參考我的程式碼,只需要用原有的框架,能夠保證直接執行main.lua就可以了。

Base指令碼其實就是繼承自MonoBehaviour的空指令碼,替換以前的View

另外LuaManager內增加了對luaState的訪問
以後的文章我不在對此說明了