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

內容摘要:

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

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


對于C#還是Lua我都是一直懵逼的,但生活還是要繼續,所以,繼續死磕,雖然真的每天進度幾乎沒有。像是在水里掙扎。廢話少說,直接進入主題。

在Lua這邊直接來獲取到UGUI的UI控件

我們是需要在Lua這邊直接來獲取到UGUI的UI控件來進行操作賦值包括監聽其狀態之類的東西。但是對于一些控件絕非易事。
一般的控件只需要用點語法調用其wrap過來的屬性或是用冒號來調用它的方法就好,舉個栗子:

  --啟動事件--
  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了吧,就是拿到了一個GameObject了要獲取它本身帶的Component,就用這方法來獲取到.
那么下面這個要得到Text的組件,就可以這樣:


一個UI的Inspector截圖

這個CoinText就可以通過

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

Toggle和Dropdown引入監聽方法OnValueChanged

本來一切都是很好的,但是遇到了Toggle和Dropdown;
它們都有一個監聽方法叫OnValueChanged。就是怎么搞都是無效。
后來查了下,發現它們在C#這邊是這樣寫的。

toggle.onValueChanged.AddListener(OnValueChanged);

寫在Lua這邊就是

toggle.onValueChanged:AddListener(OnValueChanged);

要保證這行代碼在Lua能正常的執行需要在CustomSettings里面wrap一些東東。
(應該沒人會跟我一樣卡在這里的,卡了幾天調這個方法一直是nil value。)
需要加的幾行代碼:

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

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

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

就這樣。互相學習。

增加內容:

控件InputField引入監聽方法OnValueChanged

查詢文檔給出的內容是:


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

因此在CustomSetting中需導入的兩個文件為

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

用Dropdown遇到一個問題

打包到iOS運行出現的問題,Dropdown選項擠在一起了,點它也彈出來也會收不回去。有圖為證:

揉成一團的Dropdown

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容