에 나온 코드를 사용하다가
prefab을 singleton으로 사용하고 싶어서 위키 코드를 수정해서 사용해봄.
리소스 폴더내에 지정된 경로에 prefab을 위치시키고 (예시 /Resourses/Prefabs/Singleton/)
instance 생성 전 해당 위치에서 prefab을 찾아보고 존재하면 해당 prefab을 Instantiate 해서 사용함.
public class Singleton: MonoBehaviour where T : MonoBehaviour { private static T _instance; private static object _lock = new object(); public static T Instance { get { if (applicationIsQuitting) { return null; } lock (_lock) { if (_instance == null) { _instance = (T)FindObjectOfType(typeof(T)); if (FindObjectsOfType(typeof(T)).Length > 1) { return _instance; } if (_instance == null) { GameObject singleton; var prefab = Resources.Load ("Prefabs/Singleton/" + typeof(T).Name); if (prefab != null) { _instance = Instantiate (prefab); singleton = _instance.gameObject; } else { singleton = new GameObject(); _instance = singleton.AddComponent (); } singleton.name = "(singleton) " + typeof(T).Name; DontDestroyOnLoad(singleton); } else { //already created } } return _instance; } } } private static bool applicationIsQuitting = false; public void OnDestroy() { applicationIsQuitting = true; } }
댓글 없음:
댓글 쓰기