Singletonパターンとは
Singletonパターンとは、ソフトウェアデザインパターンの1つで、
特定のクラスのインスタンスがプログラム全体で一意に存在することを保証する方法です。
具体的には、次の3つの性質を持っています。
1.唯一のインスタンス
シングルトンクラスのインスタンスは1つしか存在しません。
新たに外部からインスタンスを生成することはありません。
2.グローバルなアクセスポイント
シングルトンクラスのインスタンスには、
どこからでもアクセスできる共通のアクセスポイントが提供されます。
3.インスタンス化の制御
シングルトンパターンでは、通常、最初のアクセス時にインスタンスが生成されます。
そして、その後のアクセスではその生成されたインスタンスが再利用されます。
Singletonパターンでクラスを実装する
上記3つの特性に沿って実装したクラスがこちらです。
using UnityEngine;
public class Singleton : MonoBehaviour
{
// シングルトンインスタンス
private static Singleton instance;
// インスタンスのプロパティ
public static Singleton Instance
{
get
{
if (instance == null)
{
// シーン内からインスタンスを検索
instance = FindObjectOfType<Singleton>();
if (instance == null)
{
// インスタンスが見つからなかった場合、新しいゲームオブジェクトを作成
GameObject singletonObject = new GameObject();
instance = singletonObject.AddComponent<Singleton>();
singletonObject.name = typeof(Singleton).ToString() + " (Singleton)";
// シーン遷移時にオブジェクトを破棄しないように設定
DontDestroyOnLoad(singletonObject);
}
}
return instance;
}
}
// Awakeメソッドで重複インスタンスをチェック
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else if (instance != this)
{
Destroy(gameObject);
}
}
}
1.唯一のインスタンスに該当するのは
// シングルトンインスタンス
private static Singleton instance;
2.グローバルなアクセスポイントに該当するのは
// インスタンスのプロパティ
public static Singleton Instance
{
get
{
if(instance == null)
{
// 最初のアクセス時にインスタンスを生成
instance = new Singleton();
// シーン遷移時に破棄されないようにする
DontDestroyOnLoad(instance.gameObject);
}
return instance;
}
}
3.インスタンス化の制御に該当するのは
// Awakeメソッドで重複インスタンスをチェック
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else if (instance != this)
{
Destroy(gameObject);
}
}
という構成になっています。
Singletonパターンで実装するだけなら、DontDestroyOnLoadに設定する必要はありません。
最後までご覧いただきありがとうございました