I’ve tried your method, but only the first time open level working as fast load, later if I want to open another level, crashes the engine in the packaged game. All the method(like the async load and add to root or load it from primary asset or keep a reference) I tried is working in PIE, but not in packaged game build.
Later I found that every time I open another level, in the packaged game, engine tend to unload all the current loaded map data, if this level data was pre loaded by myself, whether it is root or not, crash report tells me this level is not cleaned up by garbage collection.
Also I found the FAssetData struct does not hold any in memory data, but a reference to the asset in memory or in the hard drive, keep the loaded object is caching the data, but crash the engine when it open another level(unload current pre cached level)
Fatal error: [File:D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp] [Line: 12966] World /Game/Maps/LevelB.LevelB not cleaned up by garbage collection! World /Game/Maps/LevelB.LevelB [target] (standalone) TestGameInstance_C /Engine/Transient.GameEngine_0:TestGameInstance_C_0 (ObjectProperty /Game/Test/TestGameInstance.TestGameInstance_C:NewVar_14) GameEngine /Engine/Transient.GameEngine_0 (root) (ObjectProperty /Script/Engine.GameEngine:GameInstance)
UE4Editor_Core!FDebug::AssertFailed() [d:\build\++ue4\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:417]
UE4Editor_Engine!UEngine::VerifyLoadMapWorldCleanup() [d:\build\++ue4\sync\engine\source\runtime\engine\private\unrealengine.cpp:12966]
UE4Editor_Engine!UEngine::LoadMap() [d:\build\++ue4\sync\engine\source\runtime\engine\private\unrealengine.cpp:12000]
UE4Editor_Engine!UEngine::Browse() [d:\build\++ue4\sync\engine\source\runtime\engine\private\unrealengine.cpp:11527]
UE4Editor_Engine!UEngine::TickWorldTravel() [d:\build\++ue4\sync\engine\source\runtime\engine\private\unrealengine.cpp:11725]
UE4Editor_Engine!UGameEngine::Tick() [d:\build\++ue4\sync\engine\source\runtime\engine\private\gameengine.cpp:1353]
UE4Editor!FEngineLoop::Tick() [d:\build\++ue4\sync\engine\source\runtime\launch\private\launchengineloop.cpp:3699]
UE4Editor!GuardedMain() [d:\build\++ue4\sync\engine\source\runtime\launch\private\launch.cpp:174]
UE4Editor!GuardedMainWrapper() [d:\build\++ue4\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:145]
UE4Editor!WinMain() [d:\build\++ue4\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:276]
UE4Editor!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:283]
kernel32
ntdll
Any idea? Thanks in advance.