Try Advanced Scene Manager out, evaluate how it works and if it fits your needs!
Trial version available here.
Background
Advanced Scene Manager (ASM) originated from our own experiences while developing a game. A year ago, we realized that not having a proper scene management solution led to an increasingly unmanageable mess every time we added a new scene. It reached a point where we had to either shut down the project or completely remake it.
Determined to solve this problem once and for all, we decided to create an asset that would simplify scene management. We carefully planned and executed ASM, and we are proud to say that we succeeded in creating a robust solution.
Why You Will Benefit from ASM
Our goal in developing ASM was to create an inclusive tool that supports a wide range of use cases. With ASM, you can set up your game flow in minutes instead of hours, weeks, or months.
We believe ASM can greatly simplify your development process, and we are eager to hear about your specific use cases. Your feedback could help us further enhance the asset to meet your needs.
Very much appreciate you took the time to read and checking out our asset!
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).