欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity单例模式基类模板

程序员文章站 2022-03-31 20:47:28
...

1、NormalSingleton:普通单例类

将脚本按功能分为Util、Manager、Module、View。单例模式基类属于Util工具类。
子类不继承自MonoBehavior,不需要挂在游戏物体上。
传入的参数T是需要使用该单例模板的子类的类名。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NormalSingleton<T> where T:class,new ()//对T进行限制,首先它是一个类,其次能够进行构造函数的调用
{
    private T _single;
    public T Single
    {
        get
        {
            if(_single==null)
            {
                _single = new T();
                if(_single is MonoBehavior)
                {
                    Debug.LogError("Mono类单例请使用MonoSingleton");
                    return null;
                }
            }
            return _single;
        }
    }
}

2、MonoSingleton:Mono单例类

适用于需要挂载在游戏物体上的,需要继承MonoBehavior的子类脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MonoSingleton<T> : MonoBehavior where T: MonoBehavior
{
    private T _single;
    public T Single
    {
        if(_single == null)
        {
            //Mono单例类脚本挂在哪个物体上都一样,所以直接创建一个新游戏物体,将脚本挂在该游戏物体下,并以T类的名称命名
            GameObject go = new GameObject(typeof(T).name);
            DontDestroyOnLoad(go);//保证在切换场景时物体不会被销毁
            _single = go.AddComponent(T);//AddComponent(T)会返回GetComponent<T>()的值
        }
        
        return _single;
    }
}