Level Streaming "Should Block On Load" Does Not Work

This has been the case for a while, but I think the other questions for it have been marked “solved but not really”, and I have a repro project now.

The level streaming system goes back to at least UE3, where I used it a lot. The intended functionality of the “Should Block On Load” parameter of the “Load Stream Level” node is to hitch the main thread until the load is complete when it processes the level streaming next rather than doing it asynchronously.

If Should Block On Load is TRUE, the entire game should freeze up until the entire level is loaded (which will take less time because it’s basically all we’re doing). (pretty sure this is what happens if you press caps lock on the load screen in Xcom 2!)

If Should Block On Load is FALSE, the game continues to play while the level slowly loads in around the player - sometimes, but not always, what you want. And that’s the only result you can get right now with the Level Stream node.

There’s a workaround - call Flush Level Streaming every time you want a blocking load - but that’s not ideal, and currently has problems of its own in some cases:

Here’s a repro project:

http://impromptugames.com/pasta/LevelStreamingFailRepro4032018.7z

This is a show-stopper for multiple projects I’m working on at the moment.

1 Like

If it helps:
-this behaviour is the same in PIE and in packaged builds
-level streaming volumes set to Blocking Load have the same issue

I have this as an issue too. Does not block in streaming levels. There are workarounds - at least for us, try keeping some proxy mesh in the persistant, to then be replaced by the streaming level. Until epic notices or fixes this, it reduces the jarring visual effect . Ie less gaping holes. Plus use lots of ‘loading’ but not show visually, and use them quite a while in advance. ie tuning your level with loading but not displaying level stream volumes timed to player move speeds. It works but its a pain

Still not fixed on 4.22.2

For my edification, can anyone confirm or deny that this functionality is… well, functional (in the current versions of the Engine)?

It looks like the issue is still there, can’t get it working

I think the issue is that loading a level is likely working properly and blocking, but to SHOW a level (the “Make Visible After Load” checkbox), that’s a whole new ballgame. That part is NOT part of loading according to all the code I’ve seen. Displaying the level is POST load.

In C++, I use OnLevelShown delegate on the Level instance. But in Blueprint, they give you nothing. You have zero access to the level reference. If you did have access to it, you could do what I do where I pause the game, load the level, set the delegate and then unpause in the delegate call and continue on. Works great.

It’s easy enough to add in C++ and make it available to BP. But you still have to manually pause and unpause the game.

1 Like