midas+son의 크리에이티브(creative) 이야기

바로 전 글에서 유니티에서 싱글톤 할 때 

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에 싱글톤을 걸지는 

용도에 따라 잘 파악해서 사용하자.


오브젝트용 싱글톤 코드는 이전 글을 참조하자.