Actually, maybe it’s the level instance in the main UI level. I’ll convert it to regular actors and see if that makes a difference.
I’m in C++.
UGameplayStatics::OpenLevelBySoftObjectPtr(world, level);
Not sure why OpenLevel needs a world argument. That seems strange to me. The BP node has a world context input as well, but it’s hidden most of the time and automatically uses the world from the object calling it. So this should be identical.
My problem is how to know when it done. You can’t get a handle to the world to bind events to until after the level is loaded (unlike streaming where it lets you provide a delegate).
I tried using the AssetManager and it has no problem providing the level before calling OpenLevel. I bind my delegates, but nothing gets called. And I know for a fact that the level is never initialized (the actors are still uninitialized). I’ll have to double check the one in the AssetManager is the same as was opened and not a copy (CDO type deal). Or my UObject with the callback got GCd, but fairly certain that didn’t happen.
GEngine->GetWorldContextFromGameViewport(GEngine->GameViewport)
This always returns the main level even after OpenLevel is called.