Hay tareas simples que dependiendo de si se está ejecutando la aplicación en el Editor o fuera de este, se han de hacer de una u otra manera y es fácil llegar a pasarlo por alto en algún punto y llevarse un pequeño susto innecesario.
Eliminar objetos en Unity es una de esas acciones y ya no solo es que dependa de estar o no en el Editor, sino también en si se está ejecutando o no el juego en ese instante.
public static void Remove ( GameObject p_obj )
{
#if UNITY_EDITOR
if ( Application.isPlaying )
GameObject.Destroy( p_obj );
else
GameObject.DestroyImmediate( p_obj );
#else
GameObject.Destroy ( p_obj );
#endif
}
Como se indica en la propia documentación oficial de Unity..
«This function ( DestroyImmediate ) should only be used when writing editor code since the delayed destruction will never be invoked in edit mode. In game code you should use Object.Destroy instead«