Why Level.LoadScene{...] and Level.UnloadScene[...] takes different scene class type?

in Level class

LoadScene[Async] takes SceneReference or Guid as parameter type
but UnloadScene[Async] takes only Scene as parameter type.

It is bearable to use asset drag drop reference instead of string identifier when loading scene,
but why it takes another different type for unload param?

Level.Scenes property gives every scenes loaded, not providing a way to distinguish which is what.

Level.FindScene() takes only GUID to return Scene, so it is much more picky to ‘find a scene currently loaded’ from engine.

Level.GetScene() takes only integer index to return Scene, so it is 100% incompatible to LoadScene[…] family.

Only just a few ‘comparison’ is supportd to SceneReference, and seems there is no intuitive way to get corresponding ‘Scene’ from ‘SceneReference’ according to docs.

Eventually I couldn’t get the picture of consistent way to manage ‘what scene to load’, ‘what scene is now loaded’, and ‘what scene to unload’. Should I store Index Number/GUID/SceneReference/Scene all at once to keep track and convert/query each other? Or is there any centralized way to keep ‘alias’ of a scene for various API calls?

What is the standard way to unload a scene already loaded, by UnloadScene()?

I believe it’s this way because it allows you to load the same scene multiple times. If you want a list of scenes, there is Level.Scenes. Level.FindScene() has an overload that takes a Guid in, which is what SceneReference actually contains. I believe you could use that to to reference a loaded Scene using SceneReference.