In your example, when you have 3 items when the first Awake starts all the 3 Game Sessions are already attached to the scene, so it will destroy all GameSession objects. This is not the right way to do Singleton pattern in Unity. A better approach would be:
using UnityEngine; public class Singleton : MonoBehaviour { private static Singleton instance; public Singleton Instance { get { return instance; } } void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(this.gameObject); } else { Destroy(this); } } }
you can then get your instance by calling Singleton.Instance