If you’re tired of fighting with Unity’s built-in SceneManager, you’re not alone.
A lot of us run into the same issues: clunky additive loading, repetative setups in new projects, loading screens that are a pain to set up, DontDestroyOnLoad problems, and keeping everything stable when you have multiple scenes going at once. That’s why we made Advanced Scene Manager 3 (ASM3). It’s a proper SceneManager replacement that makes scene management in Unity much smoother and more reliable.
Main things it handles well:
Easy additive scene loading and unloading without the usual headaches
Ready-to-go loading screens and progress handling
Scene collections to keep your project organised
Events/callbacks for different stages of loading so you can hook into transitions easily
Useful editor tools to visualise and manage your scene setup
It’s especially handy on bigger projects where the default SceneManager starts feeling limited.
Free trial available here (Requires Unity 6.0): Trial - GitHub
Here’s a quick overview video:
If you have any questions about Advanced Scene Manager or want to share how you’re using it, feel free to reply below.
Yes, you are able to load in a Collection, a Single scene, or additively, so that you quickly can jump between scenes.
The buttons that look like , + handle that, (Tbh we are still looking to change those icons, any tips?)
You are also able to whitelist and blacklist scenes, in case you want a scene to always be there when you open another scene.
Oh the button changes when you click it. Now that makes sense. As for a different button, I don’t have any preferences at the moment but I’ll definitely have to check this out when I get home.
Unfortunately, errors other than those mentioned have slipped through testing into the release.
Currently issues with building the project, this will be addressed and updated asap, together with other planned patching like reduce dependencies. Should be sorted today and sent to unity for patching.
This doesn’t cause issues working in the editor, but none the less something we shouldn’t have missed.
As we work to bring you a product we are proud of, we learn along the way!
For some reason updating fixed it. I’m not sure if my project being outdated was the issue or updating causing a reimport did.
Reason I’m unsure is because when I first imported the package Unity was refusing to acknowledge any scenes that weren’t newly created (I couldn’t drag them into ASM). Then it imported for a few seconds and all the scenes appeared but that error likely started occurring. So it might’ve been an editor issue that was cached that got deleted during the upgrade.
Just to be on the safe side can you PM me or email me the updated package?
If it happens that a scene just refuses, which happens sometimes, we have a refresh button installed to force everything to update. which can be found in the top right corner!
New update once again! 1.1.0, with a new feature!
Added Cross Scene References to the mix as we felt that would fit very well into the asset.
Built-in ready to be used, just drag and drop references that’s it.
Any features you’d like to see us add? hit us up here or on discord!
Hi @Nuwm, great asset, started playing around with it this weekend and hit an issue where when you register non-persistent callbacks for sceneOpen/close you are removing them from the list while iterating the same list (which c# doesn’t like). Anyway the fix is to create a copy of the list then iterate on the copy. I’ve patched the code below in my build to fix the issue but you might want to update your package. I suppose you’ve been testing with persistent callbacks all this while
Ideally would be great if you could use some temporary list instead of creating a new one (like I did below) so you don’t generate extra garbage each time a scene is open/closed. (personally I use a collection pool for that purpose).
void OnSceneOpened(object scene, SceneManagerBase sceneManager)
{
ISceneObject obj = null;
if (scene is OpenSceneInfo info)
obj = info.scene;
else if (scene is SceneCollection collection)
obj = collection;
else
return;
if (sceneOpenCallbacks.TryGetValue(obj, out var list))
{
// <--- Here should make a copy of the list
var listCopy = new List<(Action action, bool persistent)>();
listCopy.AddRange(list);
foreach (var action in listCopy)
{
action.action?.Invoke();
if (!action.persistent)
sceneOpenCallbacks.GetValue(obj).Remove(action);
}
}
if (scene is OpenSceneInfo info2)
utility.SceneOpened?.Invoke(info2, sceneManager);
}
void OnSceneClosed(object scene, SceneManagerBase sceneManager)
{
ISceneObject obj = null;
if (scene is OpenSceneInfo info)
obj = info.scene;
else if (scene is SceneCollection collection)
obj = collection;
if (sceneCloseCallbacks.TryGetValue(obj, out var list))
{
// <--- Here should make a copy of the list
var listCopy = new List<(Action action, bool persistent)>();
listCopy.AddRange(list);
foreach (var action in listCopy)
{
action.action?.Invoke();
if (!action.persistent)
sceneCloseCallbacks.GetValue(obj).Remove(action);
}
}
if (scene is OpenSceneInfo info2)
utility.SceneClosed?.Invoke(info2, sceneManager);
}
Thank you for your support, we are grateful for the suggestion.
I sent this on to the main engineer, he replied that he added the copy suggestion and if he’ll take a look at the pooling suggestion if it’s needed.
We have a bigger update in the making so will take a little while until that’s done before we update the package. Hopefully within a few weeks! (Hopefully)
With a bonus Debug.log every time you save! (nothing we intend to keep, it just somehow slipped in )
Update v1.2.0
New Features: Stutter reduction: Tools to help to reduce laggy loads often caused by initializing too much in start/awake. and automatic backgroundLoadingPriority. Team Lock: Enables you to set scenes and collections to “locked”, thus preventing unwanted changes and more merge conflicts.
Fixes: Important: removed tag startup options, this was confusing and caused confusion, like this sentence… Editor: Added multi drag and drop to collections, for those who need to add 100+ scenes. Editor: Fixed dropping when dragging scene from the hierarchy. Editor: Fixed collections collapsing when reordering scenes. Editor: Holding shift on collection open buttons to ignore any tags set on scenes. Extra: 4 new Loading screen examples: Video, Quote, IconBounce, PressAnyButton. Runtime: Added SceneCollection.Find, to easily find a collection by name.
I have an issue (in the previous version too) where even though I’ve disabled the default pause screen, it still shows up in my Builds (not when running in editor).