본문 바로가기
Utils

Unity, 작업 중 Editor가 점점 느려지는 경우

by Client. DJ 2023. 3. 18.
반응형

작업하다보면 에디터가 점점 느려진다?

프로젝트 작업을 하다보면, 알게모르게 메모리가 누수가 되어 누적이 되고, 이는 에디터가 느려지고 작업에 영향을 줍니다. 특히 게임 플레이를 몇 번 하다보면 크게 체감이 됩니다. 유니티 프로파일를 하다보면 알 수가 있지만, 사용하지 않은 리소스들이 메모리를 차지하고 있고, 이는 대체적으로 에디터에서는 로드한 일부 Resource들을 메모리에서 계속 점유하고 있는 작동 원리에 이유가 있습니다. 몇 회 전에 실행한 리소스들도 들고 있는 경우가 종종 발견되곤 합니다. 이 경우 보통 유니티를 껐다가 다시 켜서 해결하기도 하지만, 이를 자동화 방면으로 조금이나마 해결할 수 있을까 싶어서 방법을 알아보았습니다.

스크립트

EditorModeMemoryManager.cs

#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;

[InitializeOnLoad][ExecuteInEditMode]
public class EditorModeMemoryManager
{
    static EditorModeMemoryManager()
    {
        EditorApplication.update -= Update;
        EditorApplication.update += Update;
    }

    private static void Update()
    {
        if (EditorApplication.isPlaying && !EditorApplication.isPlayingOrWillChangePlaymode)
        {
            ClearMemory();
        }
    }

    private static void ClearMemory()
    {
        // Your code to clear memory here
        Resources.UnloadUnusedAssets();
        System.GC.Collect();
        Debug.Log("Memory cleared after exiting play mode.");
    }
}
#endif

해당 스크립트를 추가하는 것만으로도 자동으로 작동이 됩니다. 에디터 모드인 경우에서만 작동이 되며, 빌드되는 버전에서는 영향이 없습니다. 따로 Scene이나 GameObject의 컴포넌트로 추가하지 않아도 됩니다.
 
플레이 모드에서 종료가 되는 시점에서 유니티 자산을 정리하는 'Resources.UnloadUnusedAssets()'와 C#에서 지원하는 메소드 중, 메모리를 강제로 정리하는 'System.GC.Collect()'를 호출함으로 써, 좀 더 세밀한 메모리 정리하는 코드를 넣었습니다.

플레이 모드가 끝나고 나면, 메모리가 자동으로 정리가 된다.

마무리

프로젝트의 규모가 점점 커지다 보니, 작업하는데 느려지는 빈도가 점점 많아져서 코드로 알아보게되었습니다. 많은 프로젝트에 원활한 작업이 되었으면 바랍니다. :)


참고 1: https://docs.unity3d.com/kr/530/ScriptReference/Resources.UnloadUnusedAssets.html
참고 2: https://learn.microsoft.com/ko-kr/dotnet/api/system.gc.collect?view=net-7.0
 

반응형

댓글