Unity/Tips

Unity 메모리 관리 간단한 [ UnloadUnusedAssets(), Singleton 사용 시 ]

최애뎡 2021. 12. 16. 00:06
728x90
반응형

1. Resources 폴더 사용 시

Load, Instantiate를 사용하게 되는데 GameObject의 경우야 Destroy를 하면 되지만

Texture 같은 녀석들을 Load 해서 사용할 경우

예로

RawImage.texture = Resources.Load<Texture>("경로");

이럴 때는 Destroy가 아니라 

RawImage.texture = null;

 요런 식으로 끝내는 경우가 있는데 이렇게 되면 로드된 리소스는 계속 로드되어 있는 상태이므로 추가로

-> Resources.UnloadUnusedAssets()를 사용해서 사용되지 않는 리소스들을 언로드 시키도록 하자

* 작업하면서 많은 texture 등을 로드한 뒤 추후 언로드 할 경우에도 사용하긴 했지만 주로 씬 전환 시 사용하였음

 

2. Singleton 사용 시

평상시에 보통 

    static Managers instance;
    public static Managers Instance { get { return instance; } set { instance = value; } }
    
    private void Awake()
    {
        Init();
    }

    public void Init()
    {
        if (instance == null)
        {
            GameObject go = gameObject 또는 GameObject.Find("") 등;
            if (go == null)
            {
                go = new GameObject { name = "Manager" };
                go.AddComponent<Managers>();
            }

            DontDestroyOnLoad(go);
            instance = go.GetComponent<Managers>();
        }
        else
            Destroy(gameObject);
    }

대략 이런 느낌으로 템플릿을 두고 사용을 하는데 씬 작업을 하다 보면 DontDestroyOnLoad를 사용하지 않고 한 씬에서만 static을 쓸 경우도 있는데 이럴 때는 꼭

    private void OnDestroy()
    {
        instance = null;
    }

요런 식으로 객체가 없어지고 난 뒤 살아있는 instance를 비워주는 습관이 필요

* OnDestroy를 항상 같이 붙여주는 습관을 만들면 좋을 듯 

 

반응형