Процедурная генерация дома или чего-либо в Unity

Я создал генератор домов и кастомный редактор для инспектора, но остались вопросы:

  1. я строю дом из блоков которые переедаю в инспекторе, и делаю их копии через Instantiate, в результате у меня выходит куса экземпляров этого объекта в окне иерархии. Это нормально, на сказывается на производительности?

  2. Мне нужно динамически менять дом под вводимые в инструктор параметры, как мне отловить что какое-то поле изменилось?

  3. При этом, визимо, необходимо уничтожить все потомки, я нашёл функцию которая перебирает их всех и вызывает destroy(). Но она как-то не всегда правильно работает. Имеет смысл не удалять объекты, а сохранять ссылки на них и убирать в некоторый пул неиспользованнных элементов?


Ответы (2 шт):

Автор решения: Yaroslav
  1. А куса это сколько? А сколько полигонов, материалов, разрешение?
  2. В custom editor это делается очень просто, присваивая значение из GUILayout, другой переменной и сравнивая эту переменную и поле target класса.
  3. Уничтожить чьих потомков? В редакторе нужно использовать DestroyImmediate.
→ Ссылка
Автор решения: Andrew
  1. ровно на столько же сказывается на производительности как и созданные обьекты без инициализации програмным кодом, а созданием через эдитор. Тут еще много зависит от того какие компоненты ты на каждый обьект вешаешь. Если у тебя очень много элементов с RigitBody - имей ввиду что будет лагать) Загугли тесты производительности с разным количеством коробок или бочек в юнити.
  2. при смене любой переменной в инспекторе вызывается OnValidate
  3. сделай метод который убивает всех детей обьекта, а потом вызывает дестрой у самого себя.
     public void DestroyMeAndChildren()
     {
         foreach (Transform child in gameObject.transform) {
             GameObject.Destroy(child.gameObject);
         }
         gameObject.Destroy;
     }
→ Ссылка