unity中的单例类有两种,继承mono和不继承mono。
不继承mono的。
/// <summary>
/// 非继承mono的单例类
/// </summary>
/// <typeparam name="T"></typeparam>
public class Singleton<T> where T :new()
{
private static T _instance;
public static T GetInstance
{
get
{
if(_instance ==null)
{
_instance = new T();
}
return _instance;
}
}
}
继承mono的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 继承mono的单例类
/// </summary>
/// <typeparam name="T"></typeparam>
public class Singleton<T> :MonoBehaviour where T :MonoBehaviour
{
private static T _instance =null;
public static T GetInstance
{
get
{
if(_instance ==null)
{
_instance = FindObjectOfType<T>();
if(FindObjectsOfType<T>().Length > 1)
{
Debug.LogError("不能存在多个单例");
return _instance;
}
if(_instance == null)
{
GameObject go = new GameObject(typeof(T).Name);
DontDestroyOnLoad(go);
_instance = go.AddComponent<T>();
}
}
return _instance;
}
}
}