Monobehaviour单例实现的探索(一)

前言

在Unity3D游戏开发中,Monobehaviour单例模式是常见的设计模式之一,具有广泛的应用需求。本篇文章参考自一位外国友人的代码,让我们学习一下他的设计思路吧。

代码

v1.0
using UnityEngine;

/// <summary>
/// 非持久化单例
/// </summary>
/// <typeparam name="T">待封装为单例的类型</typeparam>
/// <remarks>
/// 会在场景卸载或程序退出等销毁机制中进行销毁
/// </remarks>
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
    public static T instance { get; private set; }
    protected virtual void Awake() { instance = this as T; }
    protected virtual void OnApplicationQuit()
    {
        instance = null;
        Destroy(gameObject);
    }
}

/// <summary>
/// 持久化单例
/// </summary>
/// <typeparam name="T">待封装为单例的类型</typeparam>
/// <remarks>
/// 会在场景卸载的销毁机制中保留
/// </remarks>
public abstract class MonoSingletonPersistant<T> : MonoSingleton<T> where T : MonoBehaviour
{
    protected override void Awake()
    {
        if (instance != null) Destroy(gameObject);
        DontDestroyOnLoad(gameObject);
        base.Awake();
    }
}
v1.1
using UnityEngine;

/// <summary>
/// 非持久化单例
/// </summary>
/// <typeparam name
posted @ 2024-09-29 13:58  我与岁月的森林  阅读(0)  评论(0)    收藏  举报  来源