Процедурная генерация дома или чего-либо в Unity
Я создал генератор домов и кастомный редактор для инспектора, но остались вопросы:
я строю дом из блоков которые переедаю в инспекторе, и делаю их копии через Instantiate, в результате у меня выходит куса экземпляров этого объекта в окне иерархии. Это нормально, на сказывается на производительности?
Мне нужно динамически менять дом под вводимые в инструктор параметры, как мне отловить что какое-то поле изменилось?
При этом, визимо, необходимо уничтожить все потомки, я нашёл функцию которая перебирает их всех и вызывает destroy(). Но она как-то не всегда правильно работает. Имеет смысл не удалять объекты, а сохранять ссылки на них и убирать в некоторый пул неиспользованнных элементов?
Ответы (2 шт):
- А куса это сколько? А сколько полигонов, материалов, разрешение?
- В custom editor это делается очень просто, присваивая значение из GUILayout, другой переменной и сравнивая эту переменную и поле target класса.
- Уничтожить чьих потомков? В редакторе нужно использовать
DestroyImmediate.
- ровно на столько же сказывается на производительности как и созданные обьекты без инициализации програмным кодом, а созданием через эдитор. Тут еще много зависит от того какие компоненты ты на каждый обьект вешаешь. Если у тебя очень много элементов с RigitBody - имей ввиду что будет лагать) Загугли тесты производительности с разным количеством коробок или бочек в юнити.
- при смене любой переменной в инспекторе вызывается OnValidate
- сделай метод который убивает всех детей обьекта, а потом вызывает дестрой у самого себя.
public void DestroyMeAndChildren()
{
foreach (Transform child in gameObject.transform) {
GameObject.Destroy(child.gameObject);
}
gameObject.Destroy;
}