Problems loading streaming level through BP

Hi! I’m trying to load a level asynchronously but it doesn’t seem to work. I’ve tried two different blueprint nodes:

Load Stream Level
Load Level Instance (I tried to force the function to make it multithread)

The former is a latent function, however it freezes my game for several seconds when the level is loading. The latter is not latent and, obviously, is freezing my game too

So, how can I know if it’s doing an asynchronous load? What’s the best way to do it to make my levels load seamlessly?

Google says this is the freshest entry in this sort of topic and since I’m currently testing this I might as well write down what I’m doing. Maybe helps someone:

It appears this only really happens the first time as if the loading into the game itself works async as it should but the preceeding part, when the map gets loaded into memory first is the one that causes the problem, So, tried the following:

I do an AsyncLoadAsset on the “to be loaded” level’s map asset first.
Then give it a delay of 0.2 (default number). While I really (REALLY) don’t like delays in situations like this it appears that AsyncLoad Completed triggers earlier than the loaded asset being registered or something. Maybe it gets loaded but without the delay the LoadLevel part does not recognize it as the same thing or whatnot. Dunno.
Then I Load Level Instance (by name). I’m doing dynamically changed level parts so I cannot use preset levels, thus normal streaming is out the window, but LevelInstances work marvelously.

Anyways, so far this appears to affect/mitigate the stutter/freeze but I’m still having doubts. Did try it with a ridiculously complicated map and only had a relatively minor fps drop (simply plugged in my original test map that I used to test EVERYTHING… it even took over my player pawn because of some ancient tests I have done) so should be at least a step in the right direction.

Btw, I’m using the Victory Plugin by Rama, which makes using LevelInstanceLoading in multiplayer a breeze. You could look into that too. If you are trying dynamic level streaming without it in multiplayer… in blueprint only… do tell if you manage to pull it off because I have no idea how that would be possible :slight_smile:

EDIT.: I forgot to mention something that was actually a big problem for me in this area. When you call LoadLevelInstance you should bind the level loaded event and only get the levelstreaminfo from the reference then. If you get it earlier it won’t be perfect - the info struct contains “should be loaded” etc. and those are false while loading. This means if you Replicate the info before you would need to manually change those though it’s best to wait for it to first load on server anyways?
I made a struct array that has Unloaded, Unloading, Unload after Loading, Loaded, Loading, Load after Unloading states added as Enum to each reference. Works very well though can be a tad complicated I admit :slight_smile: