The basic idea behind this is that ScriptableObjects preserve data between scenes (if I am not mistaken). So having only 1 instance of ScriptableObjectGameStates preserve data between scenes (if I am not mistaken). So having only 1 instance of should keep things in check. It's automaticallyGameStatelazy should keep things in check. It's automatically loaded fromlazyResources loaded from when addressed.Resources[Game State Manager] when addressed. is created before scene load, so it should be first to initialize (but I am not sure, I didn't test it) and is created automatically for every scene and deleted when scene is unloaded. If you load[Game scenesState inManager]Additive` is created before scene load, so it should be first to initialize (but I am not sure, I didn't test it) and is created automatically for every scene and deleted when scene is unloaded. If you load scenes in Additive way then you would have to make some manipulations to keep only 1 instance of it for both scenes, I didn't have time to test additive scene loading with it, but it's great approach, I will probably use it in a few months and update my answer to share more info.
Inspired by: Overthrowing the MonoBehaviour tyranny in a glorious ScriptableObject revolutionOverthrowing the MonoBehaviour tyranny in a glorious ScriptableObject revolution
// Old link that doesn't seem to work anymore: https://unity3d.com/learn/tutorials/topics/scripting/overthrowing-monobehaviour-tyranny-glorious-scriptableobject .