当某个对象,只想存在唯一一个实例的时候,并且可以全局访问。
整一个MonoSingleton的基类出来,然后在想要使用单例的类继承。
using UnityEngine;
public class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
//得是静态的
private static T instance;
//提供全局访问点Instance
public static T Instance {
get {
if (instance == null) {
instance = FindObjectOfType<T>();
if (instance == null) {
Debug.LogError(message: typeof(T).Name +"在场景中没有引用对象");
}
}
return instance;
}
}
void Start() {
//如果你想把这个实例带到下一个场景
if (instance == null)
{
DontDestroyOnLoad(gameObject);
}
else
//如果读取下一个场景也有这个实例,就把原来的摧毁
{
Destroy(gameObject);
}
}
}
然后要用的时候
例如:
using UnityEngine;
public class T : MonoSingleton<T>
{
public float hp = 1f;
}
别的类调用此实例的时候
例如:
T.Instance.hp -= 1f;