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>
{
}
相关推荐
肥猪猪爸9 小时前
双重检查锁(DCL)与 volatile 的关键作用
java·开发语言·单例模式
绀目澄清11 小时前
unity3d AI Navigation 中文文档
游戏·unity
绀目澄清13 小时前
Unity 的AI Navigation 系统详细总结
人工智能·unity·游戏引擎
绀目澄清14 小时前
Unity3D AI Navigation 详解:从基础概念到实战应用
unity·游戏引擎
绀目澄清15 小时前
Unity3D AI导航系统完全指南:从核心概念到动画耦合
人工智能·unity
__water15 小时前
RHK《模型贴图自由更换位置》
unity·贴图·模型贴图·移动不丢失
JIes__15 小时前
Unity(二)——3D数学
unity·游戏引擎
淡海水16 小时前
【节点】[RandomRange节点]原理解析与实际应用
unity·游戏引擎·shadergraph·图形·randomrange
weixin_424294671 天前
在Unity中,摄像机移动时出现“残影”或“闪烁”是常见问题,主要原因和处理方法。
unity·游戏引擎
天人合一peng1 天前
unity 3d 通过游戏对象的名子查到其对象
游戏·unity·游戏引擎