はじめに
今回はGameObjectにアタッチしないシングルトンの作り方についての記事になります!
Unityではよくシーンをまたいでもずっと一つしかないクラスを作るためにシングルトンを用いている方も多いかもしれません。
そもそもシングルトンとは、Unity特有ではなくオブジェクト指向におけるデザインパターンのひとつのことで、1つしかインスタンスを生成しないことが目的です。
ただUnityでのよく用いられる方法からGameObject
にアタッチしなければならないと思っている方もいるのではないでしょうか。
そこで、GameObjectにアタッチしないシングルトンについて少し触れていきたいと思います。
作り方
これが一番シンプルな実装方法だと思います。
public class SingletonClass { private static SingletonClass instance; public static SingletonClass Instance { get { if(instance == null) { instance = new SingletonClass(); } return instance; } } }
これにMonoBehavior
等を継承しても全然大丈夫ですが、GameObject
にアタッチする必要がないことに注意してください。
というかMonoBehavior
を継承していなければゲームオブジェクトにアタッチすることはできません。
これを実際に使ってみた例を見てみましょう。
実際に使った例
SingletonClass.cs
public class SingletonClass { private static SingletonClass instance; public static SingletonClass Instance { get { if(instance == null) { instance = new SingletonClass(); } return instance; } } public string Hoge() { return "hoge"; } }
SampleClass.cs
using UnityEngine; public class SampleClass : MonoBehaviour { void Start() { string s = SingletonClass.Instance.Hoge(); //シングルトンクラスのメソッドの呼び方 int num = SingletonClass.Instance.num; //シングルトンクラスの変数の利用方法 Debug.Log(s + " " + num); //hoge 10 } }
ここでのSampleClass
のみゲームオブジェクトにアタッチして再生をしてみてください。
さいごに
MonoBehaviour
を継承しないシングルトンの作り方を紹介しました。
是非うまく活用してみてください!