【UnLua】升级4.27.2的问题1. 函数默认参数值未导出2.Lua异步绑定3.LoadLuaFile无效
问题描述:
升级4.27.2对应的UnLua后,部分UFUNCTION的默认参数无法导出。在Lua访问的时候必须补全。
打包之后的程序。部分对象是异步加载的,Lua绑定也是异步的。导致蓝图或者UMG的喝多Lua函数在访问的时候并没有,代码执行失败。例如UUserWidget的Construct。
FUnLuaDelegates::LoadLuaFile不一定会执行。例如:原来想在业务代码里接管Lua文件的加载,就不生效了。或者Lua脚本是加密的。想在该委托中执行解密操作,对不起,无效。
第一个问题,已经在之前的一篇文章讲解无法导出参数默认值。
第二个问题,首先得在你的程序框架中处理好这种逻辑。要明白,对象可能是异步加载的,Lua的绑定也有可能在下一步才能成功。所以,应该正确监听Lua绑定成功事件。FUnLuaDelegates::OnObjectBinded.AddStatic(&UUIMgr::OnLuaCoreUIBinded);。除此之外,这也是UnLua插件的一个bug,相信在后面的版本中会更新。
if中的检查条件和正式绑定的时候不一致,导致异步的判定错误。改了这里,应该很少会出现异步的绑定的情况。可以到这里看原始问题记录。https://github.com/Tencent/UnLua/issues/379
第三个问题,由于Lua改了加载代码的规则导致。以前的版本,不论如何加载lua文件,都会优先判定FUnLuaDelegates::LoadLuaFile。看下面代码
在以前的版本中,还有一个Global_Require也是一样的。但在新版本中,这种加载变了。优先从LoadFromCustomLoader加载,其次从LoadFromFileSystem,最后加载LoadFromBuiltinLibs,而取消了Global_Require。所以,当某个文件是用require依赖的,不会走到FUnLuaDelegates::LoadLuaFile这个委托。但UnLua:RunFile,UnLua:LoadFile还是走的以前的逻辑。
所以,要么改一下自己的实现逻辑,同时绑定FUnLuaDelegates::CustomLoadLuaFile和FUnLuaDelegates::LoadLuaFile两个委托。 要么就别用UnLua:RunFile,UnLua:LoadFile。

三个问题都记录下,虽然项目升级4.27失败了。但以后也许会用到,也希望UnLua主线版本噪点修改好重大的bug。