Files
2025TapTapGameJam/Assets/Script/Core/MonoSingleton.cs

62 lines
1.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
namespace Core
{
/// <summary>
/// MonoBehavior抽象单例基类。确保继承类在场景中只有一个实例并提供全局访问点。
/// </summary>
/// <typeparam name="T">必须是继承自MonoBehaviour的类型。</typeparam>
public class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
// 存储单例实例
private static T instance;
/// <summary>
/// 静态公共属性,用于获取单例实例(延迟加载)。
/// </summary>
public static T Instance
{
get
{
if (instance == null)
{
// 尝试在场景中查找现有实例
instance = FindObjectOfType<T>();
if (instance == null)
{
// 如果没有,则创建新的游戏对象并附加该组件
GameObject gameObject = new GameObject(typeof(T).Name);
instance = gameObject.AddComponent<T>();
}
}
return instance;
}
}
protected virtual void Awake()
{
// 将当前对象设置为单例实例
if (instance == null)
{
instance = this as T;
return;
}
// 如果场景中已存在其他实例,则销毁当前重复的对象
if (instance != this as T)
{
Destroy(gameObject);
}
}
//清除静态实例,以防止在特定情况下出现“幽灵”实例。
protected virtual void OnDestroy()
{
if (instance == this)
{
instance = null;
}
}
}
}