Перейти к основному содержимому

Префабы и инстансинг

И то и другое даёт много чего-то. Решают они совершенно разные задачи, и неправильный выбор — частый источник либо рутины, либо тормозящих сцен.

ПрефабИнстансинг
Копируетдерево объектовгеометрию одного объекта
Каждая копияполностью независима, редактируематолько рисуется, не редактируется
Хорош длястула, используемого в двенадцати комнатахдесяти тысяч травинок
Правка в одном месте обновляет всёдане применимо — это всё один объект

Префабы

Префаб — это сохранённое дерево объектов, которое можно раз за разом бросать в сцены: лампа со своим светом и свечением, дверь со своей рамой и звуком, полностью собранный персонаж.

Измените префаб — и все его экземпляры обновятся. В этом весь смысл: дверную ручку вы чините один раз, а не в двенадцати комнатах.

Каждый экземпляр — настоящая часть вашей сцены: его можно двигать и менять в нём то, что специфично для его места.

Делайте префаб со второго раза, а не с пятого

Как только ловите себя на копировании небольшой группы объектов во второй раз — сделайте из неё префаб. Переделывать потом, когда у вас двенадцать разбросанных копий, — значит сводить воедино двенадцать наборов мелких различий.

Инстансинг

Инстансинг рисует геометрию одного объекта много раз за один вызов. Тысяча копий стоит примерно как одна — именно поэтому травяные поля, толпы, пояса астероидов и леса вообще возможны.

Три способа расставить копии:

ИсточникКак расставляет
gridпо регулярной решётке, с опциональным разбросом, чтобы сбить регулярность
scatterсвободно внутри бокса или сферы
childrenпо одной копии на дочерний объект, в позиции каждого

Источник children — вариант «сделай это быстрым»: расставьте вещи руками там, где хотите, потом включите его, и они схлопнутся в один вызов отрисовки. Пока он включён, дети сами себя не рисуют.

Как сделать копии непохожими

Копии — это одна и та же геометрия, поэтому без помощи они выглядят одинаково и читаются как обои. Разбивают это три настройки:

НастройкаЭффект
scaleMin · scaleMaxкаждая копия берёт случайный размер между ними
rotationJitterкаждая копия получает случайный поворот
colorA · colorBкаждая копия берёт оттенок между двумя

Дальше этого граф материала может прочитать, какая копия сейчас рисуется, и менять от неё что угодно: покачиваться в другой фазе, быть по-другому потёртой, иметь другой узор.

Расстановка генерируется, а не хранится

Количество, форма и seed дают одинаковую расстановку везде — в редакторе, на телефоне, у каждого участника мультиплеерной комнаты. Ничего не синхронизируется, так что десять тысяч копий не стоят сети ничего.

Поменяйте seed, чтобы получить другую расстановку из тех же настроек.

maxCount — страховка: копии сверх него не рисуются, так что съехавшая цифра не попытается занять невозможное количество памяти.


Дальше: Загрузка и стартовый экран