Best way to handle common GameObjects

I currently have different scenes for different maps. In those scenes, there are a lot of common GameObjects, like input, camera, player, etc. I currently have a prefab with all of those objects in it and then add the prefab to each scene. This doesn’t seem to be the ideal way of handling it as it requires reloading all of those objects every time the scene changes.

I was looking at using additive scenes, where there will be one scene with all the common objects and then a different scene for each map. There seems to be a few issues with this approach as well. Having all the common objects active while it transition scenes won’t work since it will cause problems if player input is still active, or the game clock is still running. It would also have the issue of accessing GameObjects between the common scene and the map scenes.

Is there any recommendations on the best way to handle this situation?

Additive scene loading is one possible solution:

A multi-scene loader thingy:

My typical Scene Loader:

Other notes on additive scene loading:

Timing of scene loading:

Also, if something exists only once in one scene, DO NOT MAKE A PREFAB out of it. It’s a waste of time and needlessly splits your work between two files, the prefab and the scene, leading to many possible errors and edge cases.

Two similar examples of checking if everything is ready to go:

Additive scene definitely is the way to go. Additionally, for things where you will only ever need one, such as the camera (particularly when using Cinemachine), its helps to have them as DontDestroyOnLoad game objects, and they can just sit there for the entirety of the application’s lifetime.

Can just disable the player’s input while a transition is underway. With the newer input system this is easier to do.