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>
{
}
相关推荐
qq_5982117575 小时前
Unity.UGUI DrawCall合批笔记
笔记·unity·游戏引擎
Tech Synapse15 小时前
Unity ML-Agents实战指南:构建多技能游戏AI训练系统
人工智能·游戏·unity
咩咩觉主1 天前
c#数据结构 线性表篇 非常用线性集合总结
开发语言·数据结构·unity·c#·游戏引擎·程序框架
熬夜学编程的小王2 天前
【Linux篇】高并发编程终极指南:线程池优化、单例模式陷阱与死锁避坑实战
linux·单例模式·线程池·线程安全
浅陌sss2 天前
Unity中AssetBundle使用整理(一)
unity·游戏引擎
Li小李同学Li2 天前
设计模式【cpp实现版本】
单例模式·设计模式
KhalilRuan2 天前
Unity-Shader详解-其五
unity·游戏引擎
惊鸿醉2 天前
Unity C# 中的 反射 小记
unity·c#·游戏引擎
Yuze_Neko2 天前
C#异步Task,await,async和Unity同步协程
开发语言·unity·c#
七月.末2 天前
【Unity】Unity中修改网格的大小和倾斜网格
unity·游戏引擎