Tencent / sluaunreal

lua dev plugin for unreal engine 4 or 5
Other
1.78k stars 422 forks source link

编辑器中播放选择独立窗口运行 调用slua.loadUI无法加载UI蓝图 #173

Closed D3ZAX closed 5 years ago

D3ZAX commented 5 years ago

如题,应该是slualib中#if WITH_EDITOR宏判断为true但是实际独立窗口运行时GEngine类型为UGameEngine导致的。

SluaLib.cpp包含的头文件中注释应该和unity没关系吧.....

另外#ifdef G是做什么用的?

pangweiwei commented 5 years ago

我测试没有你说的这个问题呀,自带的demo可以使用loadUI在独立窗口加载ui;

unity那个词是不是unity引擎,是UE有一个Unity编译模式, https://docs.unrealengine.com/en-US/Programming/BuildTools/UnrealBuildTool/BuildConfiguration/index.html

D3ZAX commented 5 years ago

奥奥,有可能是版本问题,我用的是UE 4.22.3版本。在编辑器播放按钮(启动按钮左边,编译按钮右边)上默认播放正常,点击播放按钮右侧小三角选择独立窗口播放后ui就加载不出来了

D3ZAX commented 5 years ago

刚试了下demo用4.22.3版本也有这个问题

D3ZAX commented 5 years ago

对了,还有一个问题,4.22.3版本加载继承自LuaUserWidget的UI蓝图时在NativeConstruct中加载lua脚本会晚一步,导致slua.loadUI时返回是空的,我修改成NativeOnInitialized中加载lua脚本就正常了,不知道是不是版本问题

pangweiwei commented 5 years ago

继承自LuaUserWidget的UI蓝图时在NativeConstruct中加载lua脚本会晚一步,导致slua.loadUI时返回是空的

什么意思?

D3ZAX commented 5 years ago

在lua脚本里使用slua.loadUI加载LuaUserWidget,依次调用c++方法SluaUtil::loadUI -> LuaObject::push -> ILuaTableObjectInterface::push。在 ILuaTableObjectInterface::push返回时,LuaUserWidget的lua脚本还没有被加载(LuaUserWidget::NativeConstruct方法还没有调用,没有初始化lua脚本),导致ILuaTableObjectInterface::push中判断 !isValid(luaTableObj) 为真,压栈的是nil,同时报错“Can't get a valid lua self table, push nil instead.”

所以slua.loadUI取到的是空值,在4.22.3版本是这样的

pangweiwei commented 5 years ago

ok fixed