singleton
언제나 많이 쓰는 싱글톤.
유니티 c# 스크립트 버전도 검색하면 많이 나옴.
그냥 그대로 써도 되긴 하지만 기본적으로 유니티는 신 전환시
신에 올라와 있는 오브젝트를 다 날려버려서 두가지 버전의 싱글톤을 사용하고 있다.
첫번째 버전은 현재 신 버전에서만 유용한 녀석. 가벼운 녀석이다.
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
protected static T instance;
//Returns the instance of this singleton
public static T Instance
{
get
{
if (instance == null)
{
instance = (T)FindObjectOfType(typeof(T));
if (instance == null)
{
GameObject container = new GameObject();
container.name = typeof(T)+"Container";
instance = (T)container.AddComponent(typeof(T));
}
}
return instance;
}
}
}
두번쨰는 스레드 lock도 보장하고 프로그램 내에서 계속 유지되는 싱글톤이다.
public class ISingleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
private static object _lock = new object();
public static T Instance
{
get
{
lock (_lock)
{
if (instance == null)
{
instance = FindObjectOfType(typeof(T)) as T;
if (instance == null)
{
GameObject singleton = new GameObject();
instance = singleton.AddComponent<T>();
singleton.name = "(singleton) " + typeof(T).ToString();
// 기본적으로 scene에 등록된 object들은 삭제가 되므로
// scene 이 전환될때 삭제되지 않도록 한다.
DontDestroyOnLoad(singleton);
Debug.Log(singleton.name + " Created");
}
}
}
if (instance == null)
{
Debug.LogError("Singleton is null!");
}
return instance;
}
}
public static T Initialize()
{
return Instance;
}
public static bool IsCreated()
{
return (instance != null);
}
}
'Unity > Unity Study' 카테고리의 다른 글
Texture2D Alpha channel (0) | 2015.09.13 |
---|---|
unity 에서 log보기 (0) | 2015.07.07 |
C# keywords (0) | 2015.02.18 |
void OnDrawGizmos() (0) | 2013.12.18 |
unity - camera smooth follow (0) | 2013.11.16 |