Quick answer: Unity DontDestroyOnLoad singletons multiplying with each scene load? Two scenes each instantiate the singleton; the second one survives alongside the first.
GameManager is in the Boot scene with DontDestroyOnLoad. Going to MainMenu (which also has a GameManager) creates a duplicate. Both persist forever.
Singleton Pattern
public static GameManager Instance;
void Awake() {
if (Instance != null) { Destroy(gameObject); return; }
Instance = this;
DontDestroyOnLoad(gameObject);
}Newcomers self-destruct if the singleton already exists.
Boot Scene Idiom
Put the singleton only in Boot. Other scenes never include it. Boot transitions to MainMenu via SceneManager.LoadScene — singleton survives.
OnDestroy Cleanup
Set Instance back to null in OnDestroy — matters for editor hot-reload tests where the singleton might be destroyed.
ScriptableObject as Singleton
For data-only singletons, a ScriptableObject is cleaner — no scene presence, no DontDestroyOnLoad needed.
Verifying
Scene transitions keep exactly one singleton instance. No accumulating GameManagers after multiple scene loads.
“Singletons need a self-destruct guard. Otherwise scene reload duplicates.”
ScriptableObject singletons skip the Awake dance entirely — reach for them first if your ‘singleton’ is just data.