Hello,
We are experiencing crashes related to level streaming while using World Partition in Unreal Engine 5.6.
Details:
- UE version: 5.6
- World system: World Partition
- Project: Blueprint-only
- Crashes occur during level streaming / cell loading
- Editor works fine, crash happens mainly in packaged build
The crash seems to happen when streaming cells load or unload at runtime. We suspect it may be related to actor references, loading order, or streaming timing.
Has anyone encountered similar World Partition streaming crashes in UE 5.6?
Are there known causes or recommended debugging steps to identify which actor or cell causes the crash?
Any advice would be appreciated.
Thank you.
We change from Direct 12 to Direct 11- same thing
We Optimized Enemies - Same thing
We Optimized Water and other assets - same thing
We change Hlods- same thing
We did everything what anypost says in internet or CHatgpt, even we put in upwork and no-one find a reason. please help guys
Hello there @AyaGamesinc!
Checking your provided data with my peers, when your levels stream/load at thar particular point in your footage, the engine tries to change the state of a streaming cell that it believes has already been “Removed” from the world, but is actually in the “Unloaded” state, or the other way around, hence the error you are getting:
Assertion failed:
CurrentState == ELevelStreamingState::Removed
CurrentState == ELevelStreamingState::Unloaded
Meaning, the crash has no relation with rendering, or enemy AI, hence why your attempted changes returned no results. To pinpoint what’s going on here, and reach a solution, there are a few options to try:
-
Enable streaming logs (add LogStreaming=Verbose to your Core), so you can identify which cell is being used during the crash.
-
The logs should also help you look for specific BPs or actors active while the error happens. Check for redirectors has well, if you haven’t already do so.
-
Adjust your streaming parameters and your logic to incorporate a short delay between loading/updating levels, which could prevent the engine from “missing” the next level to target.
-
Make a backup of your current 5.6 project, then test migration to 5.7.
For further reading, the community guide below has been quite useful to tinker and adjust level streaming setups, please give it a look:
I’m experiencing same problem with UE 5.7.0.
However, with the -DisableGarbageElimination option, it seems okay - the check in ULevelStreaming::GetLevelStreamingStatus() doesn’t trigger, although I haven’t tested it extensively.
In my case, the assertion failure occurs when activating a previously unloaded one:
LogLevelStreaming: Verbose: UWorldPartitionLevelStreamingDynamic::Activating /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM
…
LogLevelStreaming: Verbose: UWorldPartitionLevelStreamingDynamic::Unloading /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM
…
LogLevelStreaming: Verbose: UWorldPartitionLevelStreamingDynamic::Activating /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM
At that time, inside ULevelStreaming::RequestLevel(…)
StaticFindObjectFast(…, EInternalObjectFlags::Garbage) returns nullptr
- But,
StaticFindObjectFast(…, EInternalObjectFlags::None) returns an object marked as garbage.
Then ULevelStreaming::AsyncLevelLoadComplete(…) reports a warning: “Couldn’t find ULevel object in package …” (World’s ObjectFlags are RF_Public | RF_WasLoaded | RF_LoadCompleted | RF_MirroredGarbage)
Finally, ULevelStreaming::GetLevelStreamingStatus() hits the check “check(LocalState == ELevelStreamingState::Removed || LocalState == ELevelStreamingState::Unloaded)”
Thanks in advance for any help 
I investigated garbage LevelPackagein my above case using FReferenceChainSearch at ULevelStreaming::RequestLevel(…).
LogReferenceChain: Display: InitialGather memory usage: 12.58
LogReferenceChain: (Garbage) Package /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM is not currently reachable. Try using GC history to debug transient leaks with 'gc.historysize 1'
LogReferenceChain: Display: Post-search memory usage: 5.88
LogReferenceChain: Display: Direct ref in GC history from World /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM.A to Package /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM
LogReferenceChain: Display: InitialGather memory usage: 12.58
LogReferenceChain: (Garbage) World /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM.A is not currently reachable. Try using GC history to debug transient leaks with 'gc.historysize 1'
LogReferenceChain: Display: Post-search memory usage: 5.88
LogReferenceChain: Display: Direct ref in GC history from GCBarrier /Engine/Transient.GC_Barrier to World /Game/Maps/A/A/_Generated_/EIQOKI3U4FDM3P39OYBKQW0OM.A
Finally, I figured out the main cause of problem in our project.
gc.AllowIncrementalReachability 1 caused the problem.
- with
gc.AllowIncrementalReachability 0, there is no such problem.