CreateEditor 는 메모리에 남는다.

Yumin·2025년 8월 27일
0

Unity

목록 보기
14/18

Unity에서 Editor.CreateEditor(m_TargetObject)를 사용하면, 새로운 Editor 인스턴스가 생성됩니다.

저는 이 방식을 이용해서 EditorPreview를 생성하였습니다. 커스텀 에디터 만들 때 사용하였는데 문제는

이 Editor 인스턴스는 가비지 컬렉션에 자동으로 제거되지 않습니다.

즉, 명시적으로 해제하지 않으면 메모리에 계속 남게 됩니다.

즉 CreateEditor로 계속해서 에디터를 생성하게 된다면 메모리에 계속 남아서 부하가 걸린다는 것 입니다.

그렇기 때문에

Unity에서 안전하게 처리하려면 다음처럼 했습니다.

Editor editor = Editor.CreateEditor(m_TargetObject);

// ... editor 사용 ...

// 더 이상 필요 없으면
DestroyImmediate(editor); // 메모리 해제

결국 개발을 하면서 Disable 하는 경우도 에디터랑 코드랑 중복되는 Destroy가 있어서

Texture2D m_PreviewTexture = AssetPreview.GetAssetPreview(m_TargetObject);

GUI.DrawTexture(previewRect, m_PreviewTexture, ScaleMode.ScaleToFit);

해당 방식으로 Preview를 얻어오도록 변경하였습니다.


정리

  • Editor 객체는 MonoBehaviour나 ScriptableObject처럼 자동 해제되지 않습니다.

  • DestroyImmediate(editor)로 반드시 해제해야 메모리 누수를 방지할 수 있습니다.

  • 반복적으로 CreateEditor를 호출하면 메모리 누수가 발생할 수 있으므로, GetAssetPreview 같은 방법으로 에디터를 생성하지 않고 텍스처만 가져오는 방식이 안전합니다.

profile
クリエイティブを楽しむ開発者

0개의 댓글