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;
}
}
下一篇: 游戏玩家的移动(坦克游戏)