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 studyEvery 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 Manager | Unity 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 |