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 |
