FairyGUI為UI導(dǎo)出Lua代碼

前段時(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)該差不多。

  1. 找到FairyGUI編輯器的代碼模板目錄,在Mac上是:/Applications/FairyGUI-Editor.app/Contents/Resources/template,將下載的template/Lua目錄拷貝到編輯器的模板目錄中(原本是沒(méi)有Lua目錄的,如果你已經(jīng)有了,可以把原有的改名備份一下)。

    拷貝代碼模板

  2. 打開FairyGUI編輯器的插件目錄,可以從編輯器的工具->插件管理->打開插件目錄...打開,也可以直接打開/Applications/FairyGUI-Editor.app/Contents/Resources/plugins,將下載的bin/FairyGUILuaGen.swc拷貝到目錄中,并重新打開FairyGUI編輯器,或者點(diǎn)擊“插件管理器”的“重新載入”。

    導(dǎo)入插件

  3. 在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)出的代碼是怎樣的

一個(gè)測(cè)試demo的導(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)目,我踩了一些坑:

  1. 我看了社區(qū)問(wèn)答,使用了FlashBuilder4.7來(lái)編輯插件,結(jié)果發(fā)現(xiàn)根本運(yùn)行不起來(lái)。后來(lái)找大佬幫忙看了,改用IntelliJ IDEA 2018.1.4來(lái)編輯。
  2. 沒(méi)有在原Plugin項(xiàng)目上編輯,而是新建了一個(gè)AS項(xiàng)目(ActionScript library for desktop (Adobe AIR)),項(xiàng)目依賴了Flex SDK 4.6.0,下載地址
  3. 關(guān)于FairyGUI插件的編輯,沒(méi)有找到什么教程。純粹是根據(jù)FairyGUI-Plugin-Demo中的示例,以及接口中的注釋來(lái)看的,由于想了解IPublishData中包含的數(shù)據(jù),我寫了個(gè)打印log到本地log.txt文件的函數(shù)。邏輯代碼的核心部分在initcreateFile中。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,402評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,168評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,596評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,027評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,398評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,743評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容