Level streaming: FlushLevelStreaming() causes BeginPlay() not to be called

What it says on the tin. First of all, bShouldBlockOnLoad is broken, which forces me to flush the level streaming system before I proceed. Band-aids on band-aids.

But the real issue is that my actors are not getting BeginPlay() called. I noticed this because nothing was initting or ticking. When I finally allowed the parent blueprint of one actor in question to tick before BeginPlay was called, it worked. In other words, BeginPlay is simply not getting called.

This is 100% an issue with level streaming. BeginPlay() and Tick() are absolutely called when the level is run standalone as opposed to streamed in. If I stream the level in without flushing, it also gets called. Unreal 5.1.

I found other issues in the same vein from some years back, which claim to be fixed.

3 Likes

This issue is still present for me as well on 5.1.1

Enabling world partition in a level causes BeginPlay to not be called for an BP actor. Placing the same actor in a non-streamed level works fine. Currently I must disable “IsSpatiallyLoaded” in order to receive BeginPlay, which is untenable long term.

Still in 5.6

I have some sublevel that are blocking load after persistent level begin play. But some of them don’t get beginplay called.

EDIT: Oh, I happen to figure it out. You need to implement AGameMode rather than AGameModeBase for game mode class and implement AGameState rather than AGameStateBase for game state class. Then everything would be OK.