I’ve googled this a bunch of times, but I never found an actual question directly asking what the difference between these is.
I went to the docs of both, and the only difference I see, is that “SceneManager.LoadScene” uses the names and indexes of scenes from the Build Settings, while “Application.LoadLevel” uses ones you set in a script.
The difference is that Application.LoadLevel is the older way, and SceneManager.LoadScene is the newer way.
There interfaces are slightly different, but that’s not the real difference. The real difference is that one is old and deprecated and therefore should not be used. And the new is newer and is implemented as a SceneManager giving a some what better interface for loading scenes as well as finding out what scenes are currently loaded.
The older version had no way to find out what scenes are already loaded. It only really let you load a scene, and that was that.
I’m not sure what junk data you’re referring too, “junk data” is a bit vague.
If you mean destroying/cleaning up all the objects from the old scene. Both methods do that.
They really aren’t much different at the end of the day, in that they both unload the old scene and load a new scene (before SceneManager was introduced Applicaiton.LoadLevel was your only choice). The truly big difference between them is that today Application.LoadLevel is OBSOLETE:
And the many reason for the change isn’t the LoadLevel/LoadScene itself. But rather the fact scenes in general behave differently now. There’s tons of new features added (many since this post was originally posted… necro) that the old interface of Application.LoadLevel wasn’t robust enough to facilitate.