// allows all non-static instances to access the same static instance
public class NonStaticClass : MonoBehaviour {
private static NonStaticClass staticInstance;
}
void Awake()
{
if (instance == null)
instance = this;
else if (instance != this)
Destroy(gameObject);
}
public class SomeClass : MonoBehaviour {
private static SomeClass _instance;
public static SomeClass Instance { get { return _instance; } }
private void Awake()
{
if (_instance != null && _instance != this)
{
Destroy(this.gameObject);
} else {
_instance = this;
DontDestroyOnLoad(gameObject);
}
}
}
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T>
{
#region Variables
protected static bool Quitting { get; private set; }
private static readonly object Lock = new object();
private static Dictionary<System.Type, Singleton<T>> _instances;
public static T Instance
{
get
{
if (Quitting)
{
return null;
}
lock (Lock)
{
if (_instances == null)
_instances = new Dictionary<System.Type, Singleton<T>>();
if (_instances.ContainsKey(typeof(T)))
return (T)_instances[typeof(T)];
else
return null;
}
}
}
#endregion
#region Methods
private void OnEnable()
{
if (!Quitting)
{
bool iAmSingleton = false;
lock (Lock)
{
if (_instances == null)
_instances = new Dictionary<System.Type, Singleton<T>>();
if (_instances.ContainsKey(this.GetType()))
Destroy(this.gameObject);
else
{
iAmSingleton = true;
_instances.Add(this.GetType(), this);
DontDestroyOnLoad(gameObject);
}
}
if(iAmSingleton)
OnEnableCallback();
}
}
private void OnApplicationQuit()
{
Quitting = true;
OnApplicationQuitCallback();
}
protected abstract void OnApplicationQuitCallback();
protected abstract void OnEnableCallback();
#endregion
}
public class example : MonoBehaviour
{
public static example my_object { get; private set; } ;
float my_player_health=100;
private void Awake()
{
if (my_object != null && my_object != this)
{
Destroy(this);
} else {
my_object = this;
}
DontDestroyOnLoad(this.gameObject);
}
}
Code Example |
---|
:: c# foreach char in string |
Csharp :: |
:: c# size of enum |
Csharp :: |
Csharp :: c# console foreground color |
Csharp :: 2d topdown movement unity |
Csharp :: c# declare an int list |
:: how to say hello world in c# |
:: blazor onchange event not firing with inputselect |
:: c# string array contains |
Csharp :: c# return switch |
:: what is a protected int c# |
Csharp :: unity mouse click position |
:: how to get the hour on c# |
Csharp :: c# loop string array |
Csharp :: c# color hex |
Csharp :: unity reverse string |
Csharp :: unity icons |
Csharp :: total months between two dates c# |
Csharp :: unity how to move an object |
Csharp :: arrays in c# |
Csharp :: wpf make size fill all grid |
:: |
Csharp :: c# list length |
Csharp :: c# clamp |
:: |
Csharp :: c# best tutorial |
Csharp :: c# isarray |
Csharp :: create new .net project |
Csharp :: convert string to jtoken c# |