0
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?

More than 3 years have passed since last update.

[Unity]シングルトンの実装

Last updated at Posted at 2020-01-09

#1.シングルトンとは
・ デザインパターンの一種、インスタンスが一つしか作れない。
・ そのゲームオブジェクトがシーンに1つしか存在しないことを保証するための仕組み。
#2.実装

using UnityEngine;
using System;

    /// <summary>
    /// シングルトン
    /// </summary>
    /// <typeparam name="T"></typeparam>
    [DisallowMultipleComponent]
    public abstract class SingletonMonoBehaviour<T> : MonoBehaviour where T : MonoBehaviour
    {
        /// <summary>
        /// インスタンス
        /// </summary>
        private static T _instance;

        public static T Instance {
            get
            {
                if (_instance == null)
                {
                    Type t = typeof(T);

                    _instance = (T)FindObjectOfType(t);
                    if (_instance == null)
                    {
                        Debug.LogError(t + " をアタッチしているGameObjectはありません");
                    }
                }
                return _instance;
            }
        }

        virtual protected void Awake()
        {
            // 他のゲームオブジェクトにアタッチされているか調べる
            // アタッチされている場合は破棄する。
            CheckInstance();
        }

        /// <summary>
        /// インスタンスが生成されているか調べる
        /// </summary>
        protected bool CheckInstance()
        {
            // 生成されていなければインスタンス生成する
            if (_instance == null)
            {
                _instance = this as T;
                Debug.Log(_instance + "が生成されました。");
                return true;
            }
            else if (_instance == this)
            {
                return true;
            }

            // 生成されていたらインスタンス削除する
            Destroy(this.gameObject);
            return false;
        }
    }

※ 注意点

1.シングルトンの継承先でvoid Awake()を使用する際はオーバーライドする

protected override void Awake()
{
    // SingltonのAwake処理をする
    base.Awake();
}
0
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
0
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?