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.