1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SingletonMonoBehaviourとは?

異なるシーン間で唯一のインスタンスを維持・管理するために設計されたクラスです。
このクラスはシーン遷移に影響されず、データや設定の一貫性を保つのに役立ちます。

これだけ聞くと難しく感じるかもしれませんが、
平たく言ってしまえば「Singleton + MonoBehaviour」です。

つまり、MonoBehaviourの機能を活用しながら、
Unityのシーン間で唯一のインスタンスを管理するシングルトンを作ろう
というものです。

シングルトンってなんだ?という方は、こちらの記事 を参考にしてみて下さい。

SingletonMonoBehaviourの特徴

SingletonMonoBehaviour には3つの特徴があります。

1.MonoBehaviourを継承

-> Unityのライフサイクルイベントを利用でき、DDOLの設定も可能になる。

2.シングルトンパターンの実装

-> 通常のシングルトンパターンと同様に、唯一のインスタンスを保持する。

3.DDOLに設定

-> シーン遷移時に破棄されないように設定し、ゲームを通してインスタンスを保持する。

SingletonMonoBehaviourクラスを実装する

上記3つの特徴に沿って実装したクラスがこちらです。
using UnityEngine;

public class SingletonMonoBehaviour<T> : MonoBehaviour where T : MonoBehaviour
{
    // シングルトンのインスタンス
    private static T instance;

    public static T Instance
    {
        get
        {
            if(instance == null)
            {
                // シーン内からゲームオブジェクトを検索
                instance = FindObjectOfType<T>();

                if(instance == null )
                {
                    // インスタンスが見つからなかった場合、新しいゲームオブジェクトを作成
                    GameObject singletonObject = new GameObject();
                    instance = singletonObject.AddComponent<T>();
                    singletonObject.name = typeof(T).ToString() + " (Singleton)";

                    // シーン遷移時にオブジェクトを破棄しないように設定
                    DontDestroyOnLoad(singletonObject);
                }
            }
            return instance;
        }
    }

    // Awakeメソッドで重複インスタンスをチェック
    protected virtual void Awake()
    {
        if (instance == null)
        {
            instance = this as T;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

先ほど紹介した記事で実装したシングルトンと共通している部分がほとんどです。
大きな違いと言えば、ジェネリックなクラスになっていることです。
これにより、あらゆるクラスに対して同じシングルトンの機能を提供します。

最後までご覧いただきありがとうございました :laughing:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?