欢迎光临散文网 会员登陆 & 注册

【UnLua】升级4.27.2的问题1. 函数默认参数值未导出2.Lua异步绑定3.LoadLuaFile无效

2022-04-11 16:36 作者:天空游荡的鱼  | 我要投稿

问题描述:

  1. 升级4.27.2对应的UnLua后,部分UFUNCTION的默认参数无法导出。在Lua访问的时候必须补全。

  2. 打包之后的程序。部分对象是异步加载的,Lua绑定也是异步的。导致蓝图或者UMG的喝多Lua函数在访问的时候并没有,代码执行失败。例如UUserWidget的Construct。

  3. 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:RunFileUnLua:LoadFile还是走的以前的逻辑。

    所以,要么改一下自己的实现逻辑,同时绑定FUnLuaDelegates::CustomLoadLuaFileFUnLuaDelegates::LoadLuaFile两个委托。 要么就别用UnLua:RunFile,UnLua:LoadFile。

    

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


【UnLua】升级4.27.2的问题1. 函数默认参数值未导出2.Lua异步绑定3.LoadLuaFile无效的评论 (共 条)

分享到微博请遵守国家法律