Unity 3 Dにおけるシングルモデル

3459 ワード

一、C铉下のシングルモデル
C((zhi)単例モードを実現するには、まずC((zhi in Depth)の一章Implementing the Singleton Pattern in C啱
以下はリンクですhttp://csharpindepth.com/Articles/General/Singleton.aspxLazyとLazyの違いを紹介しました。スレッドは安全です。
以下は中国語のより詳細な説明です。http://www.cnblogs.com/rush/archive/2011/10/30/2229565.html
他の文章は基本的にこれらのことを繰り返して話しています。MSDNの文章を含めて、もっと新しい意味がありません。
二、コードを繰り返し書かないのはどうですか?
1)汎型を使う
一例では、構造モードとして、実際には2つの要求aがあります。newキーワードによって構成することができず、GetInstance()によってのみインスタンスを取得することができます。コンストラクタープラスprivte)bは、汎型を使用して、newキーワードでこのクラスを構成すると、このクラスには共通のコンストラクタが必要です。これは一例モードと矛盾している。この問題を処理しなければならないならば、一つの方法は反射を使うことです。
しかし、反射を使ってこのような実例を得ることができれば、全体の一例パターンは意味がなく、誰でもこのような実例を得ることができます。ですから、やはり自分を欺かないでください。構造関数を公開してください。https://www.codeproject.com/tips/696330/thinking-in-singleton-instead-of-a-useful-generic反射を使用して実現された一例2)Code Snippet機能を使用することは、確かに解決策であり、多くの重複して見えるコードに耐えることができるかどうかにかかっています。https://stackoverflow.com/questions/380755/a-generic-singleton三、Unity 3 Dにおける単一モードComponentの作成例の方法は、AddComponent(パンチングまたは非パンチングバージョン)が多い。
もちろん他にもいくつかの可能性があります。例えば、Prefabをロードし、シーンをロードするなどです。Componentの唯一を保証して、普通はStartあるいはAwakeの時instanceを検査して、しかも余分な実例を廃棄します。
もちろん必要があるとは思いません。Componentを一例にするべきではないとさえ思います。
コードは参照できます。http://wiki.unity3d.com/index.php/Singletonhttps://unity3d.com/cn/learn/tutorials/projects/2d-rogelik-tutorial/writing-game-manager
四、一例モードの議論
Game Programe ming Patterns-Singleton
http://gameprogrammingpatterns.com/singleton.html
http://gpp.tkchu.me/singleton.html (翻訳版)
 
添付:一例
    public class Singleton where T : class, new()
    {
        protected Singleton()
        {
        }

        public static T Instance
        {
            get { return SingletonCreator.Instance; }
        }

        private static class SingletonCreator
        {
            static SingletonCreator()
            {
            }

// ReSharper disable once StaticFieldInGenericType
// ReSharper disable once MemberHidesStaticFromOuterClass
            internal static readonly  T Instance = new T();
        } 
    }
コードはImplementing the Singleton Pattern in C葃-Fifth version-fully lazy instantiationから来ています。
現在のユニティ(5.6)はLazyをサポートしていません。
使い方1:Singleton.Instance.Method()使い方2:class C:Singleton{    //......}C.Instance.Method()