HartoukChartEditor/Assets/Script/Core/Singleton.cs

45 lines
1.4 KiB
C#
Raw Permalink 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;
/// <summary>
/// 这是一个已经封装好的泛型Mono单例,之后可以在其他地方复用它,免去很多麻烦的写法
/// </summary>
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
// 在场景中查找是否已存在该类型的实例
instance = FindObjectOfType<T>();
// 如果场景中不存在该类型的实例则创建一个新的GameObject并添加该组件
if (instance == null)
{
GameObject singletonObject = new GameObject(typeof(T).Name + "_Singleton");
instance = singletonObject.AddComponent<T>();
DontDestroyOnLoad(singletonObject); // 保留在场景切换时不被销毁
}
}
return instance;
}
}
//使用virtual虚函数子类继承可能还需要用Awake()
protected virtual void Awake()
{
// 确保在场景切换时不会销毁该实例
DontDestroyOnLoad(gameObject);
// 检查是否存在重复的实例
if (instance == null)
{
instance = this as T;
}
else
{
Debug.LogWarning("存在重复的单例" + typeof(T).Name + "删除");
Destroy(gameObject);
}
}
}