facebook twitter hatena line email

「Unity/Csharp/シングルトン」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==MonoBehaviourを使ったシングルトン== using System.Collections; using System.Collections.Generic; using UnityEngine; public class KomaManager : MonoBehaviou...」)
 
(MonoBehaviourを使ったシングルトン)
 
(同じ利用者による、間の10版が非表示)
行1: 行1:
 +
==通常シングルトン==
 +
public class SampleManager {
 +
    private static SampleManager mInstance;
 +
    private SampleManager() {
 +
    }
 +
    public static SampleManager Instance {
 +
        get {
 +
            if (mInstance == null) mInstance = new SampleManager();
 +
            return mInstance;
 +
        }
 +
    }
 +
}
 +
通常シングルトンでMonoBehaviourを継承しているとプロパティが設定取得できなくなる
 +
 
==MonoBehaviourを使ったシングルトン==
 
==MonoBehaviourを使ったシングルトン==
 
  using System.Collections;
 
  using System.Collections;
 
  using System.Collections.Generic;
 
  using System.Collections.Generic;
 
  using UnityEngine;
 
  using UnityEngine;
  public class KomaManager : MonoBehaviour {
+
  public class SampleManager : MonoBehaviour {
  private static KomaManager mInstance;
+
  private static SampleManager mInstance;
 
  public int x = 1;
 
  public int x = 1;
  private KomaManager () {
+
  private SampleManager () {
 
  }
 
  }
  public static KomaManager Instance {
+
  public static SampleManager Instance {
 
  get {
 
  get {
  if( mInstance == null ) {
+
  if (mInstance == null) {
  GameObject go = new GameObject("KomaManager");
+
  GameObject go = new GameObject("SampleManager");
  mInstance = go.AddComponent<KomaManager>();
+
  mInstance = go.AddComponent<SampleManager>();
 
  }
 
  }
 
  return mInstance;
 
  return mInstance;
行22: 行36:
 
  }
 
  }
 
  }
 
  }
 +
 +
使用方法
 +
SampleManager manager = SampleManager.Instance;
 +
Debug.Log("x=" + manager.x);
 +
 +
シーン遷移しても使いたい場合
 +
<pre>
 +
void Start () {
 +
    DontDestroyOnLoad(this);
 +
}
 +
</pre>
 +
もしくは、クラス内に、DontDestroyOnLoad(go);を追加
 +
<pre>
 +
if (mInstance == null) {
 +
GameObject go = new GameObject("SampleManager");
 +
mInstance = go.AddComponent<SampleManager>();
 +
+ DontDestroyOnLoad(go);
 +
}
 +
return mInstance;
 +
</pre>
  
 
==参考==
 
==参考==
 
https://qiita.com/calmbooks/items/9cf32c6dd36b724b155e
 
https://qiita.com/calmbooks/items/9cf32c6dd36b724b155e

2022年12月7日 (水) 17:33時点における最新版

通常シングルトン

public class SampleManager {
    private static SampleManager mInstance;
    private SampleManager() {
    }
    public static SampleManager Instance {
        get {
            if (mInstance == null) mInstance = new SampleManager();
            return mInstance;
        }
    }
}

通常シングルトンでMonoBehaviourを継承しているとプロパティが設定取得できなくなる

MonoBehaviourを使ったシングルトン

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SampleManager : MonoBehaviour {
	private static SampleManager mInstance;
	public int x = 1;
	private SampleManager () {
	}
	public static SampleManager Instance {
		get {
			if (mInstance == null) {
				GameObject go = new GameObject("SampleManager");
				mInstance = go.AddComponent<SampleManager>();
			}
			return mInstance;
		}
	}
	void Start () {
	}
	void Update () {
	}
}

使用方法

SampleManager manager = SampleManager.Instance;
Debug.Log("x=" + manager.x);

シーン遷移しても使いたい場合

void Start () {
    DontDestroyOnLoad(this);
}

もしくは、クラス内に、DontDestroyOnLoad(go);を追加

if (mInstance == null) {
	GameObject go = new GameObject("SampleManager");
	mInstance = go.AddComponent<SampleManager>();
+ DontDestroyOnLoad(go);
}
return mInstance;

参考

https://qiita.com/calmbooks/items/9cf32c6dd36b724b155e