Господа, у меня снова вопрос из серии "Не фигню ли я делаю?".
В-общем, на меня напала блажь, и я решил видеть прямо в редакторе результаты действия моего компонента при помощи [ExecuteInEditMode].
Компонент у меня создаёт в OnEnable несколько gameObject'ов, которые свистят и пердят определённым образом.
Так как юнити в редакторе делает OnDisable/OnEnable каждый раз, как я вношу правки в скрипт, они у меня по OnEnable плодятся и плодятся. Посему я стал "подтирать за собой" в методе OnDisable, при помощи Destroy уничтожая наплодившуюся братву и освобождая место для новой.
Тут меня ждал сюрприз: в редакторе Юнити не хочет работать Destroy, вместо него рекомендуют примернять DestroyImmediate:
Destroy may not be called from edit mode! Use DestroyImmediate instead.
Also think twice if you really want to destroy something in edit mode. Since this will destroy objects permanently.
|
Дважды подумав, как мне порекомендовал текст ошибки, я залез в справку по сабжу и прочитал там следующее:
You are strongly recommended to use Destroy instead.
|
Таким образом, я выдавил из себя вот что:
if (Application.isEditor)
{
DestroyImmediate(go);
}
else
{
Destroy(go);
}
Вопрос: не фигню ли я сделал? Почему редактор так упорно не хочет делать Destroy, какие причины? И если всё так уж однозначно (в редакторе сабж, не в редакторе Destroy), то почему оно не делается так автоматически?