Tencent / UnLua

A feature-rich, easy-learning and highly optimized Lua scripting plugin for UE.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

使用LuaEnvLocator_ByGameInstance在PIE模式启动多客户端时,ULuaFunction的Override会触发崩溃

FinalFtantasy opened this issue · comments

蓝图不会由此问题,仅限于C++类直接绑定Lua脚本,并在lua脚本中覆写方法。

原因是同一进程下UClass和UFunction是同一份,FLuaOverrides::Override函数中第二次对同一个UClass绑定时会出问题,首先没有找到上次绑定到的LuaFunction,其次StaticDuplicateObjectEx创建新的LuaFunction时原地构造,导致第一此绑定时创建的LuaFunction被覆盖,并且Overridden为空,触发check。

另外,const auto bAddNew = Function->GetOuter() != Class; 这行不太理解,同一进程下UFunction是同一份,addNew为false会改变UFunction的NativeFunction,感觉没必要区分,为啥不都创建LuaFunction呢

遇到了相同的问题,编辑器下Play as Client, 并且如果DS默认放在同一个进程启动,就会出现这个绑定crash:
check(Overridden);
现在就只能是设置DS不在同一个进程启动,或者用LuaEnvLocator的单虚拟机模式才能跑游戏