/// <summary>
        /// インスタンスがなければ作り、インスタンスを取得する
        /// </summary>
        /// <returns>インスタンス</returns>
        public static T GetOrCreate()
        {
            if (SingletonBehaviour <T> .Exists())
            {
                return(SingletonBehaviour <T> .Instance);
            }

            return(SingletonBehaviour <T> .Create());
        }
        protected virtual void Awake()
        {
            if (SingletonBehaviour <T> .Exists())
            {
                GameObject.Destroy(this.gameObject);
                return;
            }

            // 制約条件からキャストしても問題ない
            SingletonBehaviour <T> .Instance = this as T;
        }
        /// <summary>
        /// インスタンスを作る
        /// </summary>
        /// <returns>作られたインスタンス</returns>
        public static T Create()
        {
            if (SingletonBehaviour <T> .Exists())
            {
                Debug.LogWarning("既にインスタンスは存在します");
                return(SingletonBehaviour <T> .Instance);
            }

            // GameObjectを作ってアタッチ
            var gameObject = new GameObject(typeof(T).FullName);

            return(gameObject.AddComponent <T>());
        }