Unity C# シングルトンパターンの実装

  • 96
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

C#でのシングルトンパターン

C#でのシングルトンの一例です。
以下のように書く。

using UnityEngine;

public class SampleSingleton {

    private static SampleSingleton mInstance;

    private SampleSingleton () { // Private Constructor

        Debug.Log("Create SampleSingleton instance.");
    }

    public static SampleSingleton Instance {

        get {

            if( mInstance == null ) mInstance = new SampleSingleton();

            return mInstance;
        }
    }

    public int testNum = 10;

    public void setNum ( int num ) {

        testNum = num;
    }
}

使う側

適当なGameObjectに貼り付けておきます。

using UnityEngine;

public class Sample : MonoBehaviour {

    SampleSingleton sample1;
    SampleSingleton sample2;

    void Start () {

        sample1 = SampleSingleton.Instance;
        sample2 = SampleSingleton.Instance;

        if( sample1 == sample2 ) {

            Debug.Log("sample1 == sample2");
        }

        Debug.Log( sample2.testNum ); // 10

        sample1.setNum(100);

        Debug.Log( sample2.testNum ); // 100
    }
}

MonoBehaviourを使いたい(GameObjectにしたい)場合

便利な機能いっぱいのMonoBehaviourを継承したい場合がありますよね。

using UnityEngine;
using System.Collections;

public class SampleSingleton : MonoBehaviour {

    private static SampleSingleton mInstance;

    private SampleSingleton () { // Private Constructor

        Debug.Log("Create SampleSingleton GameObject instance.");
    }

    public static SampleSingleton Instance {

        get {

            if( mInstance == null ) {

                GameObject go = new GameObject("SampleSingleton");
                mInstance = go.AddComponent<SampleSingleton>();
            }

            return mInstance;
        }
    }

    void Start () {

        Debug.Log("Start");
    }

    void Update () {

        Debug.Log("Update");
    }
}

インスタンス化の時に、GameObjectを生成し自身をコンポーネントに追加する。