Singleton
Unity3D/Script / 2014. 3. 5. 10:41
일반형 Singleton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class MySingleton { private static MySingleton instance; // private MySingleton() { } static MySingleton() { instance = new MySingleton(); } public static MySingleton Instance { get { return instance; } } }; |
Component용 Singleton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | using UnityEngine; using System.Collections; public class MySingleton : MonoBehaviour { private static MySingleton instance; // private MySingleton() { } // public static MySingleton Instance { get { if (instance == null ) { instance = FindObjectOfType( typeof (MySingleton)) as MySingleton; if (instance == null ) { GameObject obj = new GameObject( "MySingleton" ); instance = obj.AddComponent( typeof (MySingleton)) as MySingleton; Debug.Log ( "Could not locate an MySingleton object. MySingleton was Generated Automaticly." ); } } return instance; } } void Awake() { DontDestroyOnLoad( this ); } void OnApplicationQuit() { instance = null ; } } |
제네릭 버전
일반형 Singleton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Singleton<T> where T : class , new () { private static T instance; static Singleton() { instance = new T(); } public static T Instance { get { return instance; } } }; |
Component용 Singleton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | using UnityEngine; using System.Collections; public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> { private static T instance; // public static T Instance { get { if (instance == null ) { instance = FindObjectOfType( typeof (T)) as T; if (instance == null ) { GameObject obj = new GameObject( typeof (T).ToString()); instance = obj.AddComponent( typeof (T)) as T; instance.Init(); Debug.Log ( "Could not locate an " + typeof (T).ToString() + " object. " + typeof (T).ToString() + " was Generated Automaticly." ); } } return instance; } } void Awake() { if (instance == null ) { instance = this as T; instance.Init(); } DontDestroyOnLoad( this ); } void OnApplicationQuit() { instance = null ; } public virtual void Init() { } } |
반응형
'Unity3D > Script' 카테고리의 다른 글
Platform Dependent Compilation (0) | 2014.03.11 |
---|---|
Generic Based Singleton for MonoBehaviours完全版(?) (0) | 2014.03.05 |
Serializable, NonSerialized (0) | 2013.07.30 |
Get MAC address on Android device (0) | 2013.07.24 |
Script 부모 클래스 이름으로 GetComponent() (0) | 2013.07.17 |