5. Автосоздаваемый Singleton из префаба

Понадобилось хранить настройки игры в отдельном объекте, чтобы можно было изменять через инспектор Unity.

2016-03-24 16-21-01 Unity Personal (64bit) - Garage.unity - TrafficRunnerRoma - Android DX11 on DX9 GPU

Начал с того, что попробовал обычный синглтон. Создал gameobject на сцене и повесил свой класс.

using UnityEngine;
using System.Collections;

public class GameConstructor : MonoBehaviour
{
    private static GameObject go;
    private static GameConstructor instance = null;
    public static GameConstructor Instance
    {
        get
        {
            Debug.Log(instance);
            if (instance == null)
            {
                Debug.Log("create new");
                go = Instantiate(Resources.Load("GameConsturctor")) as GameObject;
                go.name = "GameConsturctor";
                instance = go.GetComponent<GameConstructor>();

                DontDestroyOnLoad(go);
            }

            return instance;
        }
    }
}

Заметьте, DontDestroyOnLoad сохранит объект на всех сценах.
Затем захотел задать значение поля в настройках, которое используется в объекте на другой сцене и подумал, что могу редактировать в префабе, вместо переключения на сцену с объектом настроек. Создал префаб, но экземпляр префаба так и остался висеть на сцене. Потом запутался в сценах и удалил со сцены экземпляр префаба, ну, и понял, что необходим:
Автосоздаваемый Singleton из префаба.
Начал писать свое, но наткнулся на отличную статью и реализацию http://kleber-swf.com/singleton-monobehaviour-unity-projects/
Финальный код тут: https://github.com/kleber-swf/Unity-Singleton-MonoBehaviour

Получается, просто выделяем префаб в окне Project и изменяем значения как нужно.

2016-03-24 16-21-30