UnityGameProjectsCode / DiceAndMenGame / Singleton.cs
Singleton.cs
Raw
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Singleton : MonoBehaviour
{
    private Roster unitRoster, reserveUnitRoster;
    [SerializeField] private Roster startingRoster;
    [SerializeField] private int startingSceneIndex;
    public static Singleton Instance;

    public Roster UnitRoster { get => unitRoster; set => unitRoster = value; }
    public Roster ReserveUnitRoster { get => reserveUnitRoster; set => reserveUnitRoster = value; }

    private void Awake()
    {
        DontDestroyOnLoad(gameObject);
        SceneManager.sceneLoaded += OnSceneLoaded;

        if (Instance == null)
        {
            Instance = this;
            SceneManager.LoadScene(startingSceneIndex);

            SetPersitentRosters(startingRoster);
        }
        else
            Debug.LogWarning("Singleton duplicate found.");
    }

    public void SetPersitentRosters(Roster reserve)
    {
        Instance.unitRoster = ScriptableObject.CreateInstance<Roster>();

        Instance.reserveUnitRoster = ScriptableObject.CreateInstance<Roster>();

        Instance.reserveUnitRoster.Set(reserve);
    }

    // called second
    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        Debug.Log("OnSceneLoaded: " + scene.name);
        Debug.Log(mode);

        Debug.Log("Reserve Unit Count: " + reserveUnitRoster.units.Count);
        Debug.Log("Active Unit Count: " + unitRoster.units.Count);
    }
}