asqbtcupid / unreal.lua

lua solution for UnrealEngine4
MIT License
300 stars 98 forks source link

当前最新版的一个bug? #36

Closed ttaw closed 5 years ago

ttaw commented 5 years ago

UE4.21.2下 unreal.lua的master最新版貌似有一个bug: 如果一个StreamingLevel在一个PersistentLevel底下,这时该StreamingLevel里的ActorComponent调用自己的lua函数时会无法获取到GameInstance,从而导致LuaContext在每次调用lua函数时重新生成,从而无法成功执行lua函数。 需要把UnrealLuaInterface.cpp的477行代码: UWorld WorldBelong = Ins->GetTypedOuter(); 改为: UWorld WorldBelong = GEngine->GetWorldFromContextObject(Ins, EGetWorldErrorMode::ReturnNull);

还有CppObjectBase.lua文件中的第35行: self.OnEndPlay:Add(InsCallBack(self.EndPlay, self)) 里的self.OnEndPlay是什么?我的脚本每次执行到这里就会出错,貌似没有这样的变量。我把这个文件中的三处OnEndPlay的位置删除掉才能正确执行。请问一下,我这样删除后有没有什么潜在的问题?

asqbtcupid commented 5 years ago

1.谢谢反馈GameInstance的问题,关于c++调用Lua,要调用到对应的Lua函数,必须要找到对应的LuaState,因为editor模式下可以开多个Game,也就是会有多个GameInstance,框架给每个GameInstance绑定了一个LuaState,我提供了一个宏来帮助找某个UObject*对应的Gameinstance,但肯定是不够用的,实际使用中会遇到实际的问题,看来你已经懂了这个原理,想办法找到对应的LuaState即可。 2.OnEndPlay是AActor类的一个委托,我本意是Actor类调用BeginPlay时,注册一下OnEndPlay委托,当Actor销毁时,Lua这边收到通知。

ttaw commented 5 years ago

好的,感谢您的答复。