Net.Like.Xue.Tokyo/Assets/Plugins/Dreamteck/Utilities/PrivateSingleton.cs

53 lines
1.2 KiB
C#

namespace Dreamteck
{
using System.Linq;
using UnityEngine;
public class PrivateSingleton<T> : MonoBehaviour where T : Component
{
[SerializeField] protected bool _dontDestryOnLoad = true;
[SerializeField] protected bool _overrideInstance = false;
protected static T _instance;
protected virtual void Awake()
{
if (_instance != null && _instance != this)
{
if (_overrideInstance)
{
Destroy(_instance.gameObject);
_instance = this as T;
Init();
}
else
{
Destroy(this.gameObject);
}
}
else
{
_instance = this as T;
if (_dontDestryOnLoad)
{
DontDestroyOnLoad(gameObject);
}
Init();
}
}
protected virtual void Init()
{
}
protected virtual void OnDestroy()
{
if (_instance == this && !_overrideInstance)
{
_instance = null;
}
}
}
}