2018년 9월 24일 월요일

[unity] prefab을 singleton 으로 사용하기

유니티 위키 http://wiki.unity3d.com/index.php/Singleton
에 나온 코드를 사용하다가

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;
    }
}


댓글 없음:

댓글 쓰기