万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    テラシュールウェアさんの SingletonMonoBehaviourの使い方 Unity C#

    テラシュールウェアさんのサイトにシングルトンのやり方が書いてある
    URL: http://terasur.blog.fc2.com/blog-entry-311.html
    whereの書き方の理解が微妙なので僕はここの岩永さんのBlogで調べた
    URL: http://ufcpp.net/study/csharp/sp2_generics.html

    もしシングルトンにしたいクラスが、Hogeクラスのときは、

    Hoge hoge = Hoge.Instance;
    

    のやり方でできる。

    しかし、このように
    1つめは、

    SingletonMonoBehaviourクラス
     ↓
    Hogeクラス
     ↓
    HogeAクラス

    2つめは、

    SingletonMonoBehaviourクラス
     ↓
    Hogeクラス
     ↓
    HogeBクラス

    と、シングルトン化したHogeクラス、「HogeA」と「HogeB」のコンポーネントをアタッチすれば、
    HogeAとHogeBと同時にシングルトンにならない。
    後から呼び出された側のコンポーネントがDestroyされてしまう・・・。

    しかし

        public static T Instance {
            get {
                Debug.Log (typeof(T)); // 追加
                if (instance == null) {
                    instance = (T)FindObjectOfType (typeof(T));
    
                    if (instance == null) {
                        Debug.LogError (typeof(T) + " is nothing");
                    }
                }
    
                return instance;
            }
        }
    

    と追加してみたが、ログには、typeof(T)は親クラスの「Hoge」と出てしまったしたので、できない。

    やるとしたら、
    1つめは、

    SingletonMonoBehaviourクラス
     ↓
    HogeAクラス

    2つめは、

    SingletonMonoBehaviourクラス
     ↓
    HogeBクラス

    と、やるべきだと思われる。
    C#は多重継承できないので、HogeAとHogeBで共通で使いたいものを実装するにはどうしたものか。