Unityやってるワン

Unityでのゲーム開発を備忘録として記事にしていきます

シングルトンでマネージャーっぽいクラスを作ってみた

Unityで入力や音声などを管理する複数存在することがないクラスは、シングルトンのパターンで実装することが多いようです。
シングルトンとはインスタンスが1つしか生成されないようにする実装パターンです。

ManagerClass.cs

using UnityEngine;

public class ManagerClass : MonoBehaviour
{
    private static ManagerClass m_instance;

    public static ManagerClass Instance
    {
        get
        {
            if (m_instance == null)
            {
                // オブジェクト生成
                GameObject managerObject = new GameObject("ManagerClass");
                m_instance = managerObject.AddComponent<ManagerClass>();
                // シーン遷移時に破棄させないようにする
                DontDestroyOnLoad(managerObject);
            }
            return m_instance;
        }
    }
  
    protected ManagerClass () { }
}

実体にアクセスするメソッドが呼ばれた際に、実体が存在しない場合はインスタンスを生成します。
コンストラクタをprivateで宣言して、外部でインスタンスを生成させないようにしています。

GameObjectとして生成してからDontDestroyOnLoadでシーン遷移時に破棄させないようにしています。
これで入力や音声データなどを制御するManagerっぽいクラスが実装できそうですね。