Unityやってるワン

Unityで勉強したことを備忘録として記事にしていきます

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

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


ManagerClass.cs

using UnityEngine;

/// <summary>
/// マネージャークラス
/// </summary>
public class ManagerClass : MonoBehaviour
{
    /// <summary>インスタンス</summary>
    private static ManagerClass m_instance;

    /// <summary>
    /// インスタンス取得
    /// </summary>
    public static ManagerClass Instance
    {
        get
        {
            if (m_instance == null)
            {
                //オブジェクト生成
                GameObject managerObject = new GameObject("ManagerClass");
                m_instance = managerObject.AddComponent<ManagerClass>();

                //シーン遷移時に破棄させないようにする
                DontDestroyOnLoad(managerObject);
            }

            return m_instance;
        }
    }

    /// <summary>
    /// コンストラクタ
    /// </summary>
    protected ManagerClass () { }
}

実体を取得する関数を用意し、実体が生成されていなければ新たに生成するといった感じです。コンストラクタをprivateで宣言して、外部で実体を生成させないようにしています。また、GameObjectとして生成してからDontDestroyOnLoadでシーン遷移時に破棄されないようにしています。

これで入力や音声データなどを制御するManagerっぽいクラスが実装できそうですね。