はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】ゲームオブジェクトにアタッチしないシングルトンの作り方

はじめに

今回はGameObjectにアタッチしないシングルトンの作り方についての記事になります!

Unityではよくシーンをまたいでもずっと一つしかないクラスを作るためにシングルトンを用いている方も多いかもしれません。

www.hanachiru-blog.com

そもそもシングルトンとは、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のみゲームオブジェクトにアタッチして再生をしてみてください。

f:id:hanaaaaaachiru:20190624002312p:plain

f:id:hanaaaaaachiru:20190624002243p:plain

さいごに

MonoBehaviourを継承しないシングルトンの作り方を紹介しました。

是非うまく活用してみてください!