前段時(shí)間了解了一下tolua在unity3d中的使用,因?yàn)槭褂昧薋airyGUI來(lái)編輯游戲中需要的UI,正好FairyGUI也能支持在tolua中使用,所以有了讓FairyGUI編輯器為UI生成lua代碼的需求。
首先表達(dá)一個(gè)觀點(diǎn):FairyGUI編輯器為UI生成代碼非必要,但確實(shí)是有用的(如果還沒(méi)看過(guò)FairyGUI為UI生成的代碼,建議先依照FairyGUI教程做個(gè)demo試試看)。
有了UI的代碼之后,在編輯代碼時(shí)編輯器能夠提示出當(dāng)前UI對(duì)象有哪些組件可以被訪問(wèn)到,而不必去調(diào)用GetChild( chileName )
來(lái)獲得子組件(因?yàn)閏hildName是字符串,往往比較容易寫錯(cuò),而且首先你必須知道你需要的子組件的名字。對(duì)于多人聯(lián)合開發(fā)來(lái)說(shuō),這需要每個(gè)人都持有這個(gè)UI工程,并且能在FairyGUI編輯器中打開查看組件內(nèi)容),不論是C#這種強(qiáng)類型語(yǔ)言,還是lua這種弱類型語(yǔ)言。
在討論群里提問(wèn)被懟很傷:你不需要為UI導(dǎo)出lua代碼;你不需要在lua中創(chuàng)建UI。
回歸正題。
這個(gè)插件我放到了git上,地址在這里:https://github.com/qufangliu/Plugin_FairyGUI_Lua
主要參考內(nèi)容:
FairyGUI討論1群里共享的Plugin,這是社區(qū)中的問(wèn)答
FairyGUI編輯器插件如何寫
直接上手使用
首先你要去git上下載這個(gè)插件,這個(gè)倉(cāng)庫(kù)中包括了插件源碼和直接可以導(dǎo)入編輯器的插件,仔細(xì)閱讀readme.txt文件,里面寫了詳細(xì)步驟。
我這里使用的是Mac,在Windows上應(yīng)該差不多。
-
找到FairyGUI編輯器的代碼模板目錄,在Mac上是:
/Applications/FairyGUI-Editor.app/Contents/Resources/template
,將下載的template/Lua
目錄拷貝到編輯器的模板目錄中(原本是沒(méi)有Lua目錄的,如果你已經(jīng)有了,可以把原有的改名備份一下)。
拷貝代碼模板 -
打開FairyGUI編輯器的插件目錄,可以從編輯器的
工具->插件管理->打開插件目錄...
打開,也可以直接打開/Applications/FairyGUI-Editor.app/Contents/Resources/plugins
,將下載的bin/FairyGUILuaGen.swc
拷貝到目錄中,并重新打開FairyGUI編輯器,或者點(diǎn)擊“插件管理器”的“重新載入”。
導(dǎo)入插件 -
在FairyGUI編輯器中點(diǎn)擊
文件->項(xiàng)目設(shè)置->自定義屬性
,添加如下兩條屬性:
gen_lua = true
lua_class_prefix = UI_
項(xiàng)目設(shè)置
然后按照正常流程,配置好項(xiàng)目的發(fā)布設(shè)置之后,點(diǎn)擊“發(fā)布”按鈕即可。
導(dǎo)出的代碼是怎樣的
如何使用導(dǎo)出的Lua代碼(在lua中創(chuàng)建UI)
當(dāng)然,首先你要配置好相關(guān)的環(huán)境,在Unity3d接入tolua+fairyGUI+StrangeIOC中我有說(shuō)明。
然后通過(guò)以下lua代碼創(chuàng)建UI:
require("FairyGUI")
-- 引入Binder文件,Binder文件將導(dǎo)出的UI“類”注冊(cè)到FairyGUI中
require('DemoBinder')
-- UI所在的包名
UIPackageName = "Demo"
function CreateFairyGUI(uiName)
-- 創(chuàng)建UI(不是直接調(diào)用UI“類”的ctor函數(shù),也不是調(diào)用new)
local view = UIPackage.CreateObject(UIPackageName, uiName)
-- 將UI添加到GRoot
GRoot.inst:AddChild(view)
return view
end
這個(gè)過(guò)程可能是你會(huì)從C#中調(diào)用這個(gè)創(chuàng)建方法,獲取到返回的UI對(duì)象,然后在C#中對(duì)這個(gè)UI進(jìn)行AddComponent等操作,后續(xù)的操作與從C#中創(chuàng)建的UI對(duì)象的操作相同。
關(guān)于插件的編輯,因?yàn)闆](méi)有做過(guò)as項(xiàng)目,我踩了一些坑:
- 我看了社區(qū)問(wèn)答,使用了FlashBuilder4.7來(lái)編輯插件,結(jié)果發(fā)現(xiàn)根本運(yùn)行不起來(lái)。后來(lái)找大佬幫忙看了,改用IntelliJ IDEA 2018.1.4來(lái)編輯。
- 沒(méi)有在原Plugin項(xiàng)目上編輯,而是新建了一個(gè)AS項(xiàng)目(ActionScript library for desktop (Adobe AIR)),項(xiàng)目依賴了Flex SDK 4.6.0,下載地址。
- 關(guān)于FairyGUI插件的編輯,沒(méi)有找到什么教程。純粹是根據(jù)FairyGUI-Plugin-Demo中的示例,以及接口中的注釋來(lái)看的,由于想了解
IPublishData
中包含的數(shù)據(jù),我寫了個(gè)打印log到本地log.txt文件的函數(shù)。邏輯代碼的核心部分在init
和createFile
中。