內容摘要:
在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
查詢文檔給出的內容是:
因此在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的各個選項的意義,盡量去收齊。然后作為一篇文章發出來好了,就醬。