第一章【萌新】单例Singleton


今天还了解了一下最简单的设计模式,单例(我是不会啦)。


在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);
        }
    }
}

引用:

Unity 单例模式 - 简书 - DarylGo

Leave a comment

Log in with itch.io to leave a comment.