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>
{
}
相关推荐
mxwin2 小时前
Unity Shader 跨平台兼容性:处理纹理坐标翻转与精度差异
unity·游戏引擎
沉淀粉条形变量6 小时前
rust 单例模式
开发语言·单例模式·rust
派葛穆6 小时前
汇川PLC-Unity3d与汇川easy521plc进行Modbustcp通讯
unity·c#
small-pudding7 小时前
Unity URP + Compute Shader 路径追踪器实战:从可用到可优化
unity·游戏引擎
weixin_423995007 小时前
unity 物体转向鼠标点击方向2d和3d
unity·计算机外设·游戏引擎
mxwin7 小时前
Unity URP 下 Shader 变体 (Variants):multi_compile 与 shader_feature的关键字管理及变体爆炸防控策略
unity·游戏引擎
RReality9 小时前
【Unity Shader URP】全息扫描线(Hologram Scanline)源码+脚本控制
ui·unity·游戏引擎·图形渲染
渔民小镇10 小时前
一次编写到处对接 —— 为 Godot/Unity/React 生成统一交互接口
java·分布式·游戏·unity·godot
Lyyaoo.11 小时前
【JAVA基础面经】线程安全的单例模式
java·安全·单例模式
RReality1 天前
【Unity Shader URP】序列帧动画(Sprite Sheet)实战教程
unity·游戏引擎