Wait until world partitioned level is loaded or opened

Is there a way to wait until WP level is opened or fully loaded?

I am trying to implement a simple save / load. I have a load logic to “open level → set player transform position”. But I can’t find solution to how I can wait until level is loaded

Currently what is happening: player is teleported to the desired location (set actor transform) and then level is loaded with player at default player position (load level)


up

There is a node called IsLevelLoaded, this can probably be used in your case. Check this: Is Level Loaded | Unreal Engine Documentation

Hi! This node is not relevant for World Partition cause its target is Level Streaming. When I am trying to use GetStreamingLevel node and pass my world name as an input - the returned value is always null

I have tried to do following in the event to check if the level was loaded:


What is actually happening that after OpenLevel node execution flow jumps to the other graph (I assume its due to timer), and the intended flow is broken (cause there is logic afterward the level is loaded) and highlighted delay node spins infinitely due to the failure in validate node

So now I basically have 2 problems to solve:

  1. How to execute logic after delay and do NOT interrupt blueprint execution flow (as now it skips everything after OpenLevel node and returns to the parent graph and continues logic there, which is not what I want)
  2. How to wait for World Partition level to be loaded and only than execute any logic

I still can’t find a way to load a game in a particular state, spawn player in a particular spot using World Partition

Please help :pleading_face:

Hi have you solved this issue?

No, this is sadly an open question. I guess the only way for now is to NOT to use world partition :frowning:

I looked into the source code for some delegates regarding world partition streaming and after some searching I found this blueprint callable function in the subsystem

I’m guessing it tests based on set coordinates and radius. With a small enough radius it probably targets the cell at that location.

Shame there is not delegate that you could hook into that would broadcast it’s change. Perhaps it would be an idea for a pull to the source?

From a c++ side you could override void UWorldPartitionSubsystem::UpdateStreamingState() as it’s virtual
This could be used to call on updated state. I would have to read up on extending sub systems with custom properties.

1 Like