はじめに
Unityのエディタ拡張など非再生時に動くものを作ってるとDestroy()
とDestroyImmediate()
を使い分けるのが地味に面倒なので、意識しなくてもいいようにします。
拡張メソッドを足す
ObjectExtensions.cs
using UnityEngine;
# if UNITY_EDITOR
using UnityEditor;
# endif
public static class ObjectExtensions
{
public static void Destroy(this Object self)
{
# if UNITY_EDITOR
if (EditorApplication.isPlaying == false)
{
GameObject.DestroyImmediate(self);
}
else
# endif
{
GameObject.Destroy(self);
}
}
}
// Before
# if UNITY_EDITOR
if (EditorApplication.isPlaying == false) {
GameObject.DestroyImmediate(go);
} else
# endif
{
GameObject.Destroy(go);
}
// After
go.Destroy();