Game Programming/Game Engine
Unity3D :: Singleton (싱글톤)VallistA2015. 3. 28. 14:31
유니티에서는 GameObject 단위로 오브젝트들을 관리를 하기 때문에 C#에서 쓰는 평범한 방법으로는 구현을 하지 못한다.
하지만 유니티에서 객체단위의 필요한 오브젝트들을 관리하기 위해서는 꼭 필요한 것이 Singleton 인데, 구현을 어찌 해야하는가? 에 대한 의문이들어 조금 삽질을 해보았다.
여러가지 방법이 있는데 그 중에서 확답은 못하지만 내가 사용하는 방법에 대해 나눠보고자 한다.
1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Singleton : MonoBehaviour { static Singleton instance = null ; public static Singleton GetInstance { if (instance == null ) { instance = FindObjectOfType( typeof (Singleton); if (instance == null ) { Debug.Log( "Nothing" + instance.ToString()); return null ; } } return instance; } } } |
상당히 일반적인 방법이다. MonoBahaviour 에서 지원해주는 FindObjectOfType의 방법으로 사용하게 된다.
FindObjectOfType을 사용하여, 게임내에서 오브젝트 타입을 검출하여 얻는 오브젝트를 반환해준다. 만약 오브젝트가 없으면 반환을 null로 하며, Debug로 실패했다고 메시지를 준다.
2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Singleton : MonoBehaviour { static Singleton instance = null ; public static Singleton GetInstance { get { if (instance == null ) { instance = FindObjectOfType( typeof (Singleton); if (instance == null ) { Debug.Log( "Nothing" + instance.ToString()); return null ; } } return instance; } } } } |
좀 더 안전하게 가져올려면 이 방법을 쓰면 될 듯하다.
Singleton을 Generic으로 빼서 재사용성을 극대화 시키는 방법도 존재한다.
3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class Singleton<t> : MonoBehaviour where T : MonoBehaviour { protected static T instance = null ; public static T GetInstance { get { if (instance == null ) { instance = FindObjectOfType( typeof (T)) as T; if (instance == null ) { Debug.Log( "Nothing" + instance.ToString()); return null ; } } return instance; } } } |
이렇게 써주면 극대화 된 제너릭 싱글톤이 완성된다.
'Game Programming > Game Engine' 카테고리의 다른 글
Unity3D :: Google Play Game Service (구글 플레이 게임 서비스 연동) #1 기본 설정 (5) | 2015.04.02 |
---|---|
Unity3D :: Unity Keystore Release Mode (유니티 키스토어 릴리즈 모드) (1) | 2015.04.01 |
Unity3D :: Create Window for Unity Editor (유니티 에디터에 윈도우 만들기) (0) | 2015.03.26 |
Unity3D :: 에디터에서 실행하지 않은 상태로 열고 싶은 씬 열기 (0) | 2015.03.26 |
Unity3D :: Editor(에디터) 에서 소스코드로 수동 업데이트 하기 (0) | 2015.03.26 |
VallistA
병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!
자고 싶습니다. ㅠㅠ
Github :: 링크
궁금한점 문의 주시면 답변드리도록 하겠습니다
VISITED
Today :
Total :
Lately Post
Lately Comment