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
浙公网安备 33010602011771号