泛型单例模式与普通单例模式的区别:
普通单例模式:直接在相应脚本(如脚本A)中设置为单例模式,然后在其他脚本(脚本B)调用有单例模式的脚本(脚本A)功能或方法时能直接调用,而不用在awake或者start方法中引用一遍脚本(脚本A),但是当项目管理脚本比较多时,可能每个管理脚本都需要做成单例模式,如果使用普通的单例模式每个都设置一遍也不是不可以,但是泛型单例模式更方便。
泛型单例模式:新创建一个泛型单例模式的脚本,继承于该泛型单例模式脚本的类都可以直接成为单例模式,而不用单独设置;
单例模式
参考:单例模式
泛型单例模式
新建工具脚本(泛型单例模式)
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 Ondestory()
{
if (instance == this)
{
instance = null;
}
}
}
把需要成为单例模式的脚本继承该类
如GameManager脚本需要成为单例模式
public class GameManager : SingleTon<GameManager>
{
public CharacterStats PlayerStats;
public void RigisterPlayer(CharacterStats player)
{
PlayerStats = player;
}
}
|