Skip to main content

My Scene Manager

Enhance your scene management experience in Unity.

LicenseMIT
Unity6.0+
DependenciesNone
AddressablesOptional
Render pipelinesBuilt-in · URP · HDRP

One line instead of five

Perform scene transitions like this:

MySceneManager.TransitionAsync("my-target-scene", "my-loading-scene");

Instead of:

yield return SceneManager.LoadSceneAsync("my-loading-scene", LoadSceneMode.Additive);
yield return SceneManager.LoadSceneAsync("my-target-scene", LoadSceneMode.Additive);
SceneManager.SetActiveScene(SceneManager.GetSceneByName("my-target-scene"));
SceneManager.UnloadSceneAsync("my-loading-scene");
SceneManager.UnloadSceneAsync("my-previous-scene");

That same line works whether the scene comes from your Build Settings or from Addressables.

In a real project

Unity's 3D Game Kit ships with its own coroutine-driven scene loader: fade out, load in single mode, teleport the player, fade in.

Replacing it took one TransitionAsync call. The loading screen became a scene, the after-load setup moved onto the operation's events, and the sample HUD stayed loaded through every transition without DontDestroyOnLoad.

Read the case study

Every call hands back a handle

Not a callback you registered before the call — an object you hold after it.

SceneOperation op = MySceneManager.TransitionAsync("my-target-scene", "my-loading-scene");

op.Progressed += progress => bar.value = progress;
op.StateChanged += o => { if (o.State == SceneOperationState.ScreenIn) BeginIntro(); };

SceneResult result = await op; // or op.Cancel(), or yield return op.ToCoroutine()
  • Progress

    A single number for the whole operation, not one AsyncOperation per scene to average yourself.

  • States

    Resolving, ScreenIn, Unloading, Loading, Activating, ScreenOut, Completed — each one reported as it happens.

  • Cancellation

    Call Cancel on the handle. No token to thread through your call sites in advance.

Four methods, not sixty-four

Load, unload, transition, get. Version 5 collapsed the whole API into them.

One string, either source

The same call finds a scene in your Build Settings or in Addressables. No second API to learn.

Await it your way

Await it directly, bridge it to a Task, or yield return it from a coroutine. Same operation either way.

A handle for every operation

Progress, lifecycle state, per-scene events and cancellation — available after the call, not registered before it.

Loading screens beyond scenes

Drive one from a scene, a prefab or a UI Toolkit document, with a built-in component for each.

Watch it work

A logging layer reports each step, so a transition that stalls is diagnosable instead of mysterious.

What you would write instead

My Scene ManagerUnity Scene Manager
Async Scene Loading
Async Scene Unloading
Async Scene Transitions
Async Scene Reloading
Multiple Scenes Per Call
Operation Lifecycle States
Cancellation
Async/Await Support
Integrated Loading Screens
Addressables Integration

Install it

Choose your preferred installation method.