SanAndreasUnity/Assets/Scripts/Facepunch/Utilities/SingletonComponent.cs

35 lines
850 B
C#
Raw Normal View History

2020-05-31 17:07:22 +00:00
using System.Linq;
namespace UnityEngine
{
public abstract class SingletonComponent<TComponent> : MonoBehaviour
where TComponent : SingletonComponent<TComponent>
{
private static TComponent _sInstance;
public static TComponent Instance
{
get { return _sInstance ?? (_sInstance = FindObjectOfType<TComponent>()); }
}
// ReSharper disable once UnusedMember.Local
private void Awake()
{
if (FindObjectsOfType<TComponent>().Any(x => x != this && x.isActiveAndEnabled))
{
DestroyImmediate(this);
return;
}
_sInstance = (TComponent)this;
DontDestroyOnLoad(gameObject);
OnAwake();
}
protected virtual void OnAwake()
{
}
}
}