SanAndreasUnity/Assets/Scripts/Facepunch/Utilities/SingletonComponent.cs
2020-05-31 19:07:22 +02:00

35 lines
No EOL
850 B
C#

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()
{
}
}
}