【UnLua】升級4.27.2的問題1. 函數(shù)默認(rèn)參數(shù)值未導(dǎo)出2.Lua異步綁定3.LoadLuaFile無效
問題描述:
升級4.27.2對應(yīng)的UnLua后,部分UFUNCTION的默認(rèn)參數(shù)無法導(dǎo)出。在Lua訪問的時候必須補(bǔ)全。
打包之后的程序。部分對象是異步加載的,Lua綁定也是異步的。導(dǎo)致藍(lán)圖或者UMG的喝多Lua函數(shù)在訪問的時候并沒有,代碼執(zhí)行失敗。例如UUserWidget的Construct。
FUnLuaDelegates::LoadLuaFile不一定會執(zhí)行。例如:原來想在業(yè)務(wù)代碼里接管Lua文件的加載,就不生效了?;蛘週ua腳本是加密的。想在該委托中執(zhí)行解密操作,對不起,無效。
第一個問題,已經(jīng)在之前的一篇文章講解無法導(dǎo)出參數(shù)默認(rèn)值。
第二個問題,首先得在你的程序框架中處理好這種邏輯。要明白,對象可能是異步加載的,Lua的綁定也有可能在下一步才能成功。所以,應(yīng)該正確監(jiān)聽Lua綁定成功事件。FUnLuaDelegates::OnObjectBinded.AddStatic(&UUIMgr::OnLuaCoreUIBinded);。除此之外,這也是UnLua插件的一個bug,相信在后面的版本中會更新。
if中的檢查條件和正式綁定的時候不一致,導(dǎo)致異步的判定錯誤。改了這里,應(yīng)該很少會出現(xiàn)異步的綁定的情況。可以到這里看原始問題記錄。https://github.com/Tencent/UnLua/issues/379
第三個問題,由于Lua改了加載代碼的規(guī)則導(dǎo)致。以前的版本,不論如何加載lua文件,都會優(yōu)先判定FUnLuaDelegates::LoadLuaFile。看下面代碼
????在以前的版本中,還有一個Global_Require也是一樣的。但在新版本中,這種加載變了。優(yōu)先從LoadFromCustomLoader加載,其次從LoadFromFileSystem,最后加載LoadFromBuiltinLibs,而取消了Global_Require。所以,當(dāng)某個文件是用require依賴的,不會走到FUnLuaDelegates::LoadLuaFile這個委托。但UnLua:RunFile,UnLua:LoadFile還是走的以前的邏輯。
????所以,要么改一下自己的實(shí)現(xiàn)邏輯,同時綁定FUnLuaDelegates::CustomLoadLuaFile和FUnLuaDelegates::LoadLuaFile兩個委托。 要么就別用UnLua:RunFile,UnLua:LoadFile。
????

三個問題都記錄下,雖然項(xiàng)目升級4.27失敗了。但以后也許會用到,也希望UnLua主線版本噪點(diǎn)修改好重大的bug。