유니티에서의 싱글톤(Singleton) 적용 (2)
바로 전 글에서 유니티에서 싱글톤 할 때
class 동적 생성을 하면 좀 문제가 있고
오브젝트를 만들어서 FindObjectOfType 로
찾아 쓰는게 좋다고 했는데
계속 진행을 해보다 보니
이것 역시 뭔가 아니었다.
정확히 뭐가 아니었냐하면
Scene이동을 할때마다 이 객체가 Destroy 된다.
FindObjectOfType 을 사용한 싱글톤의 사용범위가
그 해당 Scene에서만 한정 되어 버린다.
DontDestroyOnLoad 으로 남기면 되지 않겠냐? 라고
생각 할 수도 있지만
오브젝트의 성격에 따라 한계가 있다.
정말 계속 가지고 있을 오브젝트나
맵만 Scene체인지 하고
Player 같은 경우에는 괜찮지만
그 오브젝트를 다른 script에서
public 참조할경우에는 테스트 하는 경우에 문제가 있다.
Release용과 Test용 오브젝트를 별도로 생각 해야 한다.
그래서 다시 생각을 하게 된 것이다.
정보들을 순수 class 동적 할당된 싱글톤을 사용하고
매 Scene에 필요한 정보들을 가져와 Awake나 Start될때
파싱을 하는 것이다.
지난 글에서 class new를 사용하면 Warning이 뜬다고 했는데
본인이 잘못 생각하고 짠 부분이 있어서 그렇다.
public class SingletonClass<T> : MonoBehaviour where T : class, new()
가 아니라
public class SingletonClass<T> where T : class, new()
가 되어야 한다.
오브젝트로 사용될 class가 아닌데 monoBehaviour를 상속 받으니
워닝(Warning)이 뜨는 것이다.
위와 같이 하자.
그리고 Object용 싱글톤도 쓰일곳이 분명히 있다.
순수 Class처럼 사용할지
Object에 싱글톤을 걸지는
용도에 따라 잘 파악해서 사용하자.
오브젝트용 싱글톤 코드는 이전 글을 참조하자.
'공부 > Unity' 카테고리의 다른 글
Resources.Load<TextAsset> 가 null 일 때 (0) | 2016.06.22 |
---|---|
NGUI 한글 입력 문제 - ime 버그 (0) | 2016.06.19 |
유니티에서의 싱글톤(Singleton) 적용 (0) | 2016.06.17 |
Vector3.forward, transform.forward (World 방향, Local 방향) (0) | 2016.06.15 |
유니티 포커싱 없이 백그라운드(Background) 동작 시키기 (1) | 2016.06.14 |