Posted March 04, 2021 by xmug
今天还了解了一下最简单的设计模式,单例(我是不会啦)。
在Unity中,大多数应用为仅存在一次的GameManager(或者其他什么Manager). 这样的gameobject,整个场景中只需要出现一个,也只能出现一个。与此同时,Manager作为一个老大哥一样的存在,他的小弟们经常需要拜访他,获取老大哥的对象也十分麻烦。因此使用单例模式来构造它可以使得Manager成为一个全局变量的存在,并且可以保证单例管理下不会造成内存溢出
代码:
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
// 这是一个基类,需要单例化的类继承于此即可
// 如果需要还可以将Awake virtual掉,让他能够被子类override
public static T Instance { get; private set; }
protected void Awake()
{
if (Instance == null)
{
// 如果单例未被初始化,那么在唤醒的同时对其进行初始化
Instance = (T)this;
// 场景切换时,不要销毁我们的单例,保留其中正在运行的变量
DontDestroyOnLoad(gameObject);
}
else
{
// 场景切换回来,或者意外多次创建单例对象时,将多余的直接摧毁,保证导航窗口中仅有一个
Destroy(gameObject);
}
}
}
引用: