使用LuaEnvLocator_ByGameInstance在PIE模式启动多客户端时,ULuaFunction的Override会触发崩溃
FinalFtantasy opened this issue · comments
Masaka commented
蓝图不会由此问题,仅限于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呢
hzwangyimin commented
遇到了相同的问题,编辑器下Play as Client, 并且如果DS默认放在同一个进程启动,就会出现这个绑定crash:
check(Overridden);
现在就只能是设置DS不在同一个进程启动,或者用LuaEnvLocator的单虚拟机模式才能跑游戏