Unity3D:设计模式之单例模式—C#单例模式和Unity单例模式

大腿Plus 2018年8月21日10:43:28Unity3D之项目开发评论746阅读模式

在Unity开发中最常用的设计模式就是单例模式,但是在使用单例模式的时候,通常会在每个脚本里去写单例方法,使用起来很不方便,在网上搜了一下,看到有很多实现方法,其中有一个我认为很方便,下面就把方法贴出来,一般的方法我就不再写了,网上有一大堆。文章源自大腿Plus-https://www.shijunzh.com/archives/989

第一种是不继承MonoBehaviour的类,一般这种适用于不挂在Unity的GameObject上的类。文章源自大腿Plus-https://www.shijunzh.com/archives/989

public class Singleton<T> where T : class, new()
{
    private static T s_Instance = default(T);
    private static readonly object SyncObject = new object();
    public static T Instance
    {
        get
        {
            lock (SyncObject)
            {
                if (null == s_Instance)
                {
                    s_Instance = new T();
                }
                return s_Instance;
            }
        }
    }
}

第二种是继承了MonoBehaviour的类,当然这种类在使用单例的时候,一定要在这个场景中只能有一个脚本,不然获得的脚本永远是其中一个。文章源自大腿Plus-https://www.shijunzh.com/archives/989

using UnityEngine;

public class MonoSingleton&lt;T&gt; : MonoBehaviour where T : MonoBehaviour
{
    private static T s_Instance;
    private static readonly object SyncObject = new object();
    public static T Instance
    {
        get
        {
            lock (SyncObject)
            {
                if (s_Instance == null)
                {
                    s_Instance = FindObjectOfType&lt;T&gt;();
                }
            }
            return s_Instance;
        }
    }
}

使用方法就是想要使用单例的类继承这两个类,下面是使用方法。文章源自大腿Plus-https://www.shijunzh.com/archives/989

public class MonoTest: MonoSingleton&lt;MonoTest&gt;
{

}
public class Test: Singleton&lt;Test&gt;
{

}
文章源自大腿Plus-https://www.shijunzh.com/archives/989
大腿Plus
  • 本文由 发表于 2018年8月21日10:43:28
  • 转载请务必保留本文链接:https://www.shijunzh.com/archives/989

发表评论