Unity 单例模式写法

普通类的写法

cs 复制代码
public class LanguageManager : MonoBehaviour
{
    private static LanguageManager _instance;
    
    public static LanguageManager Instance() {
        if (_instance == null) {
            _instance = FindObjectOfType<LanguageManager>();
            if (_instance == null) {
                GameObject go = new GameObject(typeof(LanguageManager).Name);
                 _instance= go.AddComponent<LanguageManager>();
            }
        }
        return _instance;
    }
      
}

扩展成一个单例的工具类

cs 复制代码
using UnityEngine;


/// <summary>
/// MonoBehaviour单例
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class SingletonMonoBehaviour<T> : MonoBehaviour where T : SingletonMonoBehaviour<T>
{
    private static T m_Instance;
    public static T Instance
    {
        get
        {
            if (m_Instance == null)
            {
                //查找场景是否增加了该类
                m_Instance = FindObjectOfType<T>();
                if (m_Instance == null)
                {
                    GameObject singletonObject = new GameObject { name = typeof(T).Name };
                    m_Instance = singletonObject.AddComponent<T>();
                    DontDestroyOnLoad(singletonObject);
                }
            }

            return m_Instance;
        }
    }

    public static T getInstance()
    {
        return m_Instance;
    }

    protected virtual void OnDestroy()
    {
        m_Instance = null;
    }

}

使用该类的就是

cs 复制代码
public class LogToFile : SingletonMonoBehaviour<LogToFile>
{
}
相关推荐
Ronin3054 小时前
【Linux系统】单例式线程池
linux·服务器·单例模式·线程池·线程安全·死锁
SmalBox5 小时前
【光照】Unity[经验模型]和[物理模型]
unity·渲染
青草地溪水旁7 小时前
设计模式(C++)详解—单例模式(2)
c++·单例模式
在路上看风景8 小时前
10. 游戏开发中的TCP与UDP
unity
陈言必行8 小时前
Unity 性能优化 之 静态资源优化 (音频 | 模型 | 纹理 | 动画)
unity·性能优化·游戏引擎
Thomas_YXQ18 小时前
Unity3D RectTransform.rect属性详解
unity·编辑器·游戏引擎·材质
平行云19 小时前
赋能数字孪生:Paraverse平行云实时云渲染平台LarkXR,提供强大的API与SDK用于二次开发和深度集成
3d·unity·ue5·webgl·实时云渲染·云xr
SmalBox19 小时前
【光照】[光照模型]发展里程碑时间线
unity·渲染
0wioiw020 小时前
Unity(①基础)
unity·游戏引擎
死也不注释21 小时前
【Unity UGUI 交互组件——InputFild(TMP版本)(11)】
unity·游戏引擎·交互