最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【UE4】【UnLua】4.27/UE5不會(huì)導(dǎo)出有默認(rèn)值的參數(shù)給Lua - Lua調(diào)用時(shí)必須傳完整的參數(shù)

2022-04-01 16:01 作者:天空游蕩的魚  | 我要投稿

????Lua的提示為XXX函數(shù)需要int()型的參數(shù),但獲得的參數(shù)為nil。檢查錯(cuò)誤代碼,發(fā)現(xiàn)UFUNCTION中參數(shù)為2個(gè),第二個(gè)參數(shù)的默認(rèn)值為0. Lua調(diào)用的時(shí)候代碼為self:Trigger(100), 只傳入一個(gè)參數(shù)。

錯(cuò)誤提示

????疑問:難道新版的UnLua不會(huì)填充參數(shù)默認(rèn)值嗎?是不是做了什么優(yōu)化?沒有默認(rèn)值填充,寫代碼的時(shí)候得多蛋疼。。。

????帶著執(zhí)著的2B精神(研究學(xué)術(shù)、刨根問底),我們?cè)囍タ纯碪FUNCTIN與Lua Function之間的橋梁代碼FFunctionDesc。發(fā)現(xiàn)上圖出現(xiàn)的錯(cuò)誤提示,好像出現(xiàn)了。

????仔細(xì)看看該類,可以發(fā)現(xiàn)Lua調(diào)用UFUNCTION其實(shí)是FFunctionDesc::CallUE。


????第二參數(shù)為調(diào)用的UFUNCTION參數(shù)個(gè)數(shù),第三個(gè)參數(shù)Userdata為參數(shù)值,統(tǒng)一保存在該指針中。 除了上面參數(shù)不足會(huì)輸出錯(cuò)誤log外,在下面代碼也會(huì)輸出同樣的log

????

????該代碼是在DefaultParams == nullptr時(shí),會(huì)輸出log。但按UFUNCTION的定義,會(huì)有DefaultParams才對(duì)吧?所以我們將重點(diǎn)放在啥時(shí)候給DefaultParams賦值的。此時(shí),找到了ClassDesc的RegisterField,在這里是從FunctionCollection中查找對(duì)應(yīng)方法的默認(rèn)值,只有第一次在Lua端調(diào)用指定的函數(shù)時(shí),才會(huì)調(diào)用RegisterField。

????那么,我們的任務(wù)變成了找FunctionCollection從哪里來?不難找到就是在FClassDesc初始化時(shí)從下面代碼中獲得FunctionCollection = GDefaultParamCollection.Find(*ClassName);。

????如果你看到這里,肯定懵逼了,GDefaultParamCollection全文搜索,只有定義的地方,沒有初始化的地方呢?

????你肯定找不到,因?yàn)樗谶@里

GDefaultParamCollection初始化的文件路徑


在該文件中,我們找到了自己定義的部分UFUNCTION。

? ? 通過對(duì)比發(fā)現(xiàn),其實(shí)是Int64類型的參數(shù)類型函數(shù)沒導(dǎo)出。找的過程就不贅述了。直接把關(guān)鍵代碼貼出來。在UnLua插件目錄的UnLuaDefaultParamCollector模塊中的UnLuaDefaultParamCollector.cpp,UBT在編譯的時(shí)候會(huì)觸發(fā)里面的ExportClass函數(shù)執(zhí)行。在遍歷所有函數(shù)默認(rèn)參數(shù)的循環(huán)中,找到Int類型的參數(shù),增加int64類型的判斷。如下面代碼:

自此,默認(rèn)參數(shù)值的問題搞定。 點(diǎn)贊吧


【UE4】【UnLua】4.27/UE5不會(huì)導(dǎo)出有默認(rèn)值的參數(shù)給Lua - Lua調(diào)用時(shí)必須傳完整的參數(shù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
施甸县| 桐柏县| 五台县| 永济市| 延安市| 沾益县| 昌平区| 安宁市| 巴东县| 和龙市| 迁安市| 孟津县| 阳朔县| 石首市| 枣强县| 吉木乃县| 广水市| 宁德市| 忻州市| 乳山市| 巫溪县| 天全县| 衡山县| 烟台市| 青州市| 东阳市| 牟定县| 五寨县| 仁怀市| 聊城市| 惠安县| 井研县| 泗水县| 微博| 馆陶县| 五峰| 阿坝| 专栏| 健康| 萨嘎县| 正阳县|