유니티에서의 싱글톤(Singleton) 적용
싱글톤이란 디자인 패턴 중 하나로
실직적으로 class가 오직 한번만 생성되며
어디서 호출하든 같은 instance를 가져오게하여
데이터를 공유하거나 관리할 수 있는 방법론이다.
이는 c++ 부터 Direct 3D로 게임을 만들 때에도 사용되어왔으며
각종 manager 처리를 할 때 유용하다.
보통 static으로 처리를 하거나
null이 아닐때에는 new 하지 않고
있는 값을 return하는데
유니티에서는 좀 다른 방법을 써야 하기에
이렇게 글을 남긴다.
아래는 C++에서 하던 데로
유니티에서 작성한 싱글톤 class 이다.
유니티는 C# 스크립트를 사용했으므로 C#의 문법이 되겠다.
아래의 class를 상속하게 되면 그 class는 싱글톤이 되어 버린다.
(T는 템플릿, where 뒤에 있는 항목은 해당 템플릿이 가지는 속성이라고 생각하면 된다.)
public class Singleton<T> : MonoBehaviour where T : class, new()
{
protected static T instance;
public static T GetSingleton()
{
if (instance == null)
{
instance = new T();
if (instance == null)
{
//에러 메세지
Debug.LogError(" ** Class Create Fail -> " + typeof(T));
}
}
return instance;
}
}
하지만 위와 같이 해버리면 아래와 같은 Warning이 발생 한다.
/*
*
You are trying to create a MonoBehaviour using the 'new' keyword.
This is not allowed.
MonoBehaviours can only be added using AddComponent().
Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
Singleton`1:.ctor()
UtilManager:.ctor()
System.Activator:CreateInstance()
Singleton`1:GetSingleton() (at Assets/Manager/Singleton.cs:32)
Login:Start() (at Assets/Manager/Login.cs:8)
*
*/
'공부 > Unity' 카테고리의 다른 글
NGUI 한글 입력 문제 - ime 버그 (0) | 2016.06.19 |
---|---|
유니티에서의 싱글톤(Singleton) 적용 (2) (0) | 2016.06.17 |
Vector3.forward, transform.forward (World 방향, Local 방향) (0) | 2016.06.15 |
유니티 포커싱 없이 백그라운드(Background) 동작 시키기 (1) | 2016.06.14 |
쓰레드(Thread) 사용 시 OnDestroy() 이후 까지 주의하자 (0) | 2016.06.14 |