エディタ内に動的なGUIプレビューやカスタムプレビューを埋め込んだ際、Unityエディタ自体を裏でじわじわと肥大化させフリーズに導く「エディタメモリリーク」の撃退手順です。
\n\n具体的な解決方法
エディタウィンドウ破棄時のクリーンアップ処理の完全なテンプレートコードです。
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
public class PreviewEditorWindow : EditorWindow
{
private Texture2D previewTexture;
private Material previewMaterial;
void OnGUI()
{
if (previewTexture == null)
{
// プレビュー用のテクスチャリソースなどを動的生成
previewTexture = new Texture2D(128, 128);
}
// ...ウィンドウ描画...
}
// ➔ ウィンドウが非アクティブ化、または閉じられた時の解放処理
void OnDisable()
{
CleanupResources();
}
void OnDestroy()
{
CleanupResources();
}
private void CleanupResources()
{
// エディタリソースはDestroyImmediateを使用してその場で消滅させる必要があります
if (previewTexture != null)
{
DestroyImmediate(previewTexture);
previewTexture = null;
}
if (previewMaterial != null)
{
DestroyImmediate(previewMaterial);
previewMaterial = null;
}
Debug.Log("エディタウィンドウ用の一時メモリ資源を完全に解放しました。");
}
}
#endif