Префабы и инстансинг
И то и другое даёт много чего-то. Решают они совершенно разные задачи, и неправильный выбор — частый источник либо рутины, либо тормозящих сцен.
| Префаб | Инстансинг | |
|---|---|---|
| Копирует | дерево объектов | геометрию одного объекта |
| Каждая копия | полностью независима, редактируема | только рисуется, не редактируется |
| Хорош для | стула, используемого в двенадцати комнатах | десяти тысяч травинок |
| Правка в одном месте обновляет всё | да | не применимо — это всё один объект |
Префабы
Префаб — это сохранённое дерево объектов, которое можно раз за разом бросать в сцены: лампа со своим светом и свечением, дверь со своей рамой и звуком, полностью собранный персонаж.
Измените префаб — и все его экземпляры обновятся. В этом весь смысл: дверную ручку вы чините один раз, а не в двенадцати комнатах.
Каждый экземпляр — настоящая часть вашей сцены: его можно двигать и менять в нём то, что специфично для его места.
Как только ловите себя на копировании небольшой группы объектов во второй раз — сделайте из неё префаб. Переделывать потом, когда у вас двенадцать разбросанных копий, — значит сводить воедино двенадцать наборов мелких различий.
Инстансинг
Инстансинг рисует геометрию одного объекта много раз за один вызов. Тысяча копий стоит примерно как одна — именно поэтому травяные поля, толпы, пояса астероидов и леса вообще возможны.
Три способа расставить копии:
| Источник | Как расставляет |
|---|---|
grid | по регулярной решётке, с опциональным разбросом, чтобы сбить регулярность |
scatter | свободно внутри бокса или сферы |
children | по одной копии на дочерний объект, в позиции каждого |
Источник children — вариант «сделай это быстрым»: расставьте вещи руками там, где хотите, потом
включите его, и они схлопнутся в один вызов отрисовки. Пока он включён, дети сами себя не рисуют.
Как сделать копии непохожими
Копии — это одна и та же геометрия, поэтому без помощи они выглядят одинаково и читаются как обои. Разбивают это три настройки:
| Настройка | Эффект |
|---|---|
scaleMin · scaleMax | каждая копия берёт случайный размер между ними |
rotationJitter | каждая копия получает случайный поворот |
colorA · colorB | каждая копия берёт оттенок между двумя |
Дальше этого граф материала может прочитать, какая копия сейчас рисуется, и менять от неё что угодно: покачиваться в другой фазе, быть по-другому потёртой, иметь другой узор.
Количество, форма и seed дают одинаковую расстановку везде — в редакторе, на телефоне, у каждого
участника мультиплеерной комнаты. Ничего не синхронизируется, так что десять тысяч копий не стоят
сети ничего.
Поменяйте seed, чтобы получить другую расстановку из тех же настроек.
maxCount — страховка: копии сверх него не рисуются, так что съехавшая цифра не попытается
занять невозможное количество памяти.
Дальше: Загрузка и стартовый экран