Skip to content

Recipe: Stream an Additive Level

Outcome: state authority loads and unloads an additional level without replacing the match.

Execution model

  • Authority — State Authority requests the synchronized scene load and unload.
  • Prediction — scene streaming is not predicted by Input Authority.
  • Replicated — Fusion scene information and network actors belonging to the loaded level.
  • Local only — loading indicator, fade, streaming progress, ambient audio transition, and presentation caches.

1. Prepare the scene

Create a small scene such as Arena_UpperFloor. Add it to the active Build Profile and make it available to Fusion. Do not place a second GameModeBase in this additive scene.

2. Load through World

csharp
if (world.NetworkRunner.IsServer)
{
    await world.LoadSceneAsync(
        "Arena_UpperFloor",
        LoadSceneMode.Additive);
}

This keeps the current NetworkRunner, World, players, match state, and world subsystems. It is not the same as GameInstance.BrowseAsync, which replaces the current world.

3. Unload it

csharp
if (world.NetworkRunner.IsServer)
    await world.UnloadSceneAsync("Arena_UpperFloor");

Release or despawn gameplay objects that intentionally outlive the level before unloading it.

Verify

Run a server and client. Load the level once, confirm both peers see it, then unload it. Existing characters and match state should remain. Repeated requests should not create duplicate scene content.

Understand the system

Continue with Manual: Networking and GameInstance and Travel.

RedEngine Framework documentation