using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//说明T是Singleton的类型
public class Singleton<T> : MonoBehaviour where T :Singleton<T>
{
private static T instance;
//获得创建的变量
public static T Instance
{
get { return instance; }
}
//创建可以在子类并且重写的函数
protected virtual void Awake()
{
if (instance != null)
Destroy(gameObject);
else
//从不同的类继承需要类型转换
instance = (T)this;
}
//
public static bool IsInitialized
{
get { return instance != null; }
}
protected virtual void OnDestroy()
{
if (instance == this)
{
instance = null;
}
}
}
在子类用单例时需要修改一下代码
public class MouseManger : Singleton<MouseManger>
在单例的Awake上再加一点其它的方法需要重写之前的虚函数。
base:基于原有函数父类函数方法之上的额外运行。
用了单例之后就能直接调用 。
protected override void Awake()
{
base.Awake();
//DontDestroyOnLoad(this);
}
GameManager.Instance.RigisterPlayer(characterStas);