Stupid design of SceneManager asyncs

Sorry for starting the topic with the word "stupid" but I can't say in other words. So here is the problem. I believe everyone wants to develop and play games without annoying quirks, spikes and lags. So does our team. So we wanted to preload the scene when the player selects previously saved slot, therefore that scene is fully loaded when the player hits "Play" button. But of course the player may change his/her mind, go back and select another slot. Obviously we should unload the scene we started preloading. But guess what? It's not possible: the scene we try to unload with SceneManager.UnloadSceneAsync just stays there. And you know what's even funnier? This behaviour is by design. BY DESIGN! https://issuetracker.unity3d.com/issues/scenemanager-dot-unloadsceneasync-doesnt-work-parallel-with-allowsceneactivation-equals-false I can't imaging how one could reach upon such design. Have that person ever played any game? Does he/she hate us? I'll just quote the masterpiece by Paulo Muggler (the commentary from the bug report). Sorry for such a rude post but you must feel my butthurt [quote] /rant By design? Really? Can you give a practical example of how that m-fing quirky behavior is even meaningful? Or even better, how is it more meaningful than the apparently more sensible, expected result of having separate scene loading conditions for separate AsyncOperations?

Geez, I don’t even know what to say, and I think I just puked in my mouth a little.

There should be a resolution for issues like this, called “By BAD Design”.

Makes me wonder if Unity will ever even reach a baseline level of polish and reliability across the board on all its features. I am hard pressed to find a single area in which Unity doesn’t have quirks in usability and other bugs like that.

Maybe pay for more developers, or better developers? I don’t know, look at you Unity, it’s been quite a few years, you’re all grown up now. Such a big company should be quite able to just deal with this type of sh*t. Milking the asset store and forcing subscription-only models down our throat will only ever take you that far, you know, if we can’t actually get to make the games and software we want using your engine.

Such a shame!

/rant
[/quote]

1 Like

So, no one cares? I won’t believe there are no developers who haven’t run into this problem.

Yes, that’s very clearly by-design - it’s mentioned in the documentation.

It sounds like the original intention was to stream in the next level or menu (or part of level) as-needed, rather than preload a level that may or may not be the next one to load. You should post a feature request to allow canceling a LoadLevelAsync, unloading anything that has been loaded by that point. There’s probably a technical reason a level can’t be unloaded if it hasn’t fully loaded yet (don’t forget the LoadLevelAsync doesn’t completely load if allowSceneActivation is false, it stops at 90%).

I don’t really see the problem here.

What I do have a problem with are the relatively long integration times that happen on the main thread when a async scene load completes. Even without any Awake() and Start() methods on objects in the scene that gets loaded :confused:
All coming from internal things we have no control over such as SkinnedMeshRenderer or Terrain.

Yes obviously the issue is because the Unity devs have never once played a game and very much hate their customers with a passion :stuck_out_tongue:

As @Dreamback said, I think the issue is you’re using the feature in a manner they didn’t anticipate in their design. They likely never incorporated any mechanism into the system to unload a scene that hasn’t completed the loading process. It’s likely a non-trivial change to do so, so I agree that you should make a new feature request for it.