Unity学习第二篇之单例类(持续更新)

首先应该把常规类和Mono类区分开来单独处理

1.编写常规单例类

using UnityEngine;

public class NormalSingleton<T> where T : class, new()
{
    protected static T _single;

    public static T Single
    {
        get
        {
            if (_single == null)
            {
                var t = new T();
                if (t is MonoBehaviour)
                {
                    Debug.LogError("Mono类请使用MonoSingleton");
                    return null;
                }

                _single = t;
            }

            return _single;
        }
    }
}

应用示例

public class LoadMgr : NormalSingleton<LoadMgr>
{
    public LoadMgr()
    {
	    /*
		todo
		*/
    }
}

2.编写Mono单例类

using UnityEngine;

public class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
    private static T _single;

    public static T Single
    {
        get
        {
            if (_single == null)
            {
                var go = new GameObject(typeof(T).Name);
                DontDestroyOnLoad(go);
                _single = go.AddComponent<T>();
            }

            return _single;
        }
    }
}

应用示例

public class AudioMgr : MonoSingleton<AudioMgr>, IInit
{
	/*
	todo
	*/
}
发布了16 篇原创文章 · 获赞 12 · 访问量 196

猜你喜欢

转载自blog.csdn.net/lq1340817945/article/details/105245452
今日推荐