Edited at

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

More than 5 years have passed since last update.


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を生成し自身をコンポーネントに追加する。