Unity单例模板——继承MonoBehaviour

单例模式(Singleton):使一个类在程序运行中有且只有一个实例

单例模式优点

        1.提供全局唯一访问点:确保只有一个实例存在,可以通过全局访问点获取该实例。

        2.节省系统资源消耗:在需要频繁使用的对象上使用单例模式可以减少内存开销,因为只需创建一个实例就可重复使用。

        3.简化对象管理:单例模式不需要手动创建与销毁对象,只需引用单例对象即可。

注意事项

        1.单例模式存在全局状态,可能会导致程序耦合性增加,导致后续难以维护。

        2.单例模式通常在程序开始运行时创建,并且常驻内存,不适合需要动态加载或卸载对象的场景,且不受GC的掌控,需手动卸载。

        3.尽量避免为一个单例添加过多功能,否则会导致代码复杂度过高,难以修改和维护。

单例模板——继承MonoBehaviour

using UnityEngine;

public class Singleton<T> : MonoBehaviour where T:Component
{
    private static T _instance = null;
    
    public static T Instance
    {
        get
        {
            //若单例从未被创建
            if(_instance == null)
            {
                _instance = FindObjectOfType(typeof(T)) as T;
                //场景中未找到该单例,则新创建一个挂载单例脚本的物体
                if(_instance == null)
                {
                    GameObject obj = new GameObject();
                    _instance = (T)obj.AddComponent<T>();

                    obj.hideFlags = HideFlags.DontSave;
                    obj.name = typeof(T).Name;
                }
            }
            return _instance;
        }
    }
    
    //初始化
    public virtual void Awake()
    {
        DontDestroyOnLoad(gameObject);
        if(_instance == null)
        {
            _instance = this as T;
        }
        else
        {
            Destroy(this.gameObject);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/YuKar_/article/details/133135713
今日推荐