【Unity】LuaFramework UGUI的Toggle和Dropdown及其他控件

內(nèi)容摘要:

在Lua中使用Unity這邊的UGUI控件
須在框架的CustomSettings.cs文件導(dǎo)入相應(yīng)文件以便執(zhí)行wrap操作,生成wrap文件,才能在Lua調(diào)用。
幾個(gè)特殊的控件:Toggle/Dropdown/InputField調(diào)用OnValueChanged監(jiān)聽方法需額外wrap的文件,如下:
_GT(typeof(UnityEngine.Events.UnityEvent)),
_GT(typeof(Toggle.ToggleEvent)),
_GT(typeof(Dropdown.DropdownEvent)),
_GT(typeof(InputField.OnChangeEvent)),
其他的控件直接加就可以直接用。

被UGUI的控件拖了一周的進(jìn)度,哈哈,真的是,自己想死的緊。


對(duì)于C#還是Lua我都是一直懵逼的,但生活還是要繼續(xù),所以,繼續(xù)死磕,雖然真的每天進(jìn)度幾乎沒(méi)有。像是在水里掙扎。廢話少說(shuō),直接進(jìn)入主題。

在Lua這邊直接來(lái)獲取到UGUI的UI控件

我們是需要在Lua這邊直接來(lái)獲取到UGUI的UI控件來(lái)進(jìn)行操作賦值包括監(jiān)聽其狀態(tài)之類的東西。但是對(duì)于一些控件絕非易事。
一般的控件只需要用點(diǎn)語(yǔ)法調(diào)用其wrap過(guò)來(lái)的屬性或是用冒號(hào)來(lái)調(diào)用它的方法就好,舉個(gè)栗子:

  --啟動(dòng)事件--
  function PromptCtrl.OnCreate(obj)
      gameObject = obj;
      transform = obj.transform;
      panel = transform:GetComponent('UIPanel');
      prompt = transform:GetComponent('LuaBehaviour');
      logWarn("Start lua--->>"..gameObject.name);
      prompt:AddClick(PromptPanel.btnOpen, this.OnClick);
      resMgr:LoadPrefab('prompt', { 'PromptItem' }, this.InitPanel);
   end

看到GetComponent了吧,就是拿到了一個(gè)GameObject了要獲取它本身帶的Component,就用這方法來(lái)獲取到.
那么下面這個(gè)要得到Text的組件,就可以這樣:


一個(gè)UI的Inspector截圖

這個(gè)CoinText就可以通過(guò)

local coinText = transform:Find("CenterPanel/CoinImg/CoinText").gameObject:GetComponent('Text').text;
print(coinText);--等于9999999

Toggle和Dropdown引入監(jiān)聽方法OnValueChanged

本來(lái)一切都是很好的,但是遇到了Toggle和Dropdown;
它們都有一個(gè)監(jiān)聽方法叫OnValueChanged。就是怎么搞都是無(wú)效。
后來(lái)查了下,發(fā)現(xiàn)它們?cè)贑#這邊是這樣寫的。

toggle.onValueChanged.AddListener(OnValueChanged);

寫在Lua這邊就是

toggle.onValueChanged:AddListener(OnValueChanged);

要保證這行代碼在Lua能正常的執(zhí)行需要在CustomSettings里面wrap一些東東。
(應(yīng)該沒(méi)人會(huì)跟我一樣卡在這里的,卡了幾天調(diào)這個(gè)方法一直是nil value。)
需要加的幾行代碼:

_GT(typeof(Toggle.ToggleEvent)),
_GT(typeof(Dropdown.DropdownEvent)),

還有個(gè)_GT(typeof(Event)),之類的,可惜我又忘記了,哎喲喂。
明天看看公司的代碼補(bǔ)上好了。
補(bǔ)上:

 _GT(typeof(UnityEngine.Events.UnityEvent)),

就這樣?;ハ鄬W(xué)習(xí)。

增加內(nèi)容:

控件InputField引入監(jiān)聽方法OnValueChanged

查詢文檔給出的內(nèi)容是:


Screen Shot 2017-08-31 at 9.46.16 AM.png

因此在CustomSetting中需導(dǎo)入的兩個(gè)文件為

_GT(typeof(InputField)),
_GT(typeof(InputField.OnChangeEvent)),

用Dropdown遇到一個(gè)問(wèn)題

打包到iOS運(yùn)行出現(xiàn)的問(wèn)題,Dropdown選項(xiàng)擠在一起了,點(diǎn)它也彈出來(lái)也會(huì)收不回去。有圖為證:

揉成一團(tuán)的Dropdown

有人說(shuō)是在BuildSetting→Player Settings→Other Settings使用IL2CPP來(lái)編譯就好了,但我設(shè)置導(dǎo)致項(xiàng)目都運(yùn)行不起來(lái)了。
哈哈,后面我能把他解決的吧,希望吧,有大神指導(dǎo)么,我還是別用這個(gè)Dropdown控件好了,/(ㄒoㄒ)/~~。
用了還是不行啊,大叔們!!!

(PS:解決了,是需要這樣設(shè)置,寫在末尾好了)

距離寫這篇文章好久了,但Dropdown的問(wèn)題還是解決了。首先我們要明白設(shè)置IL2CPP的意義是什么,查了下,Scripting Backend是在Unity3d 自動(dòng)打包過(guò)程中,需要支持64位,就需要設(shè)置為IL2CPP。這也完美解決了Dropdown選項(xiàng)擠在一起的問(wèn)題,特此記錄下來(lái),我會(huì)在后面去收集下Player Settings的各個(gè)選項(xiàng)的意義,盡量去收齊。然后作為一篇文章發(fā)出來(lái)好了,就醬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,311評(píng)論 0 17
  • 學(xué)習(xí) Unity GUI筆記,有各種學(xué)習(xí)資料網(wǎng)址! 1.http://www.wyzc.com/Course/Co...
    HotRay閱讀 1,169評(píng)論 0 0
  • 第4章 Bootstrap裝飾插件 JavaScript是網(wǎng)頁(yè)上事實(shí)上的腳本語(yǔ)言。流行的網(wǎng)頁(yè)功能,例如:漂亮的圖片...
    海上名月閱讀 1,737評(píng)論 5 6
  • 原文出處 http://blog.poetries.top/2016/11/19/bootstrap-review...
    前端進(jìn)階之旅閱讀 7,296評(píng)論 0 42
  • 世上沒(méi)有十全十美的人,也沒(méi)有十全十美的事!感恩遇見自己的不完美,接納自己的不完美!所有的事物存在都有他的...
    ca6625d944dd閱讀 327評(píng)論 0 0

友情鏈接更多精彩內(nèi)容