Префаб (prefab) — это шаблон для объекта в игровом движке Unity. С помощью префабов можно создать «образец» предмета с определенными свойствами, а потом использовать такие предметы на всей игровой сцене. Если изменить префаб, то изменятся все объекты, созданные на его основе.
В префабе хранится какой-либо объект со всеми свойствами и характеристиками. В движке всегда можно создать один или несколько «элементов», унаследованных от префаба, и модифицировать их.
Название происходит от метода строительства каркасных домов и означает сборку чего-то, как в конструкторе. Префабы можно группировать и комбинировать, поэтому процесс создания предметов с ними действительно напоминает конструктор.
Шаблоны в Unity называются ассетами (assets), поэтому иногда можно услышать определение, что префаб — это ассет для игрового объекта. Оно тоже верное.
Кто пользуется префабами и для чего они нужны
Префабами активно пользуются геймдев-разработчики на Unity. Они намного удобнее, чем простое «размножение» объектов копипастом. Ведь все объекты префаба наследуются от шаблона, поэтому, если понадобится изменить что-то в них всех, достаточно видоизменить сам префаб. А еще это позволяет легко создавать похожие друг на друга объекты, например толпу неигровых персонажей или какие-то шаблонные элементы ландшафта.
Префабы нужны:
- для структурирования и оптимизации процесса разработки;
- для облегчения работы в команде — так проще распределять и координировать задачи;
- для гибкого создания похожих друг на друга, но при этом уникальных элементов;
- для легкого изменения свойств или поведения всех объектов разом — например, в игровом городе наступает ночь и окна в домах начинают светиться;
- для создания четкой и понятной иерархии объектов благодаря возможности группировать и вкладывать префабы друг в друга.
Как работают префабы
Игровое поле называется сценой. На ней расставлены объекты — предметы, у каждого из которых свой дизайн, функции и характеристики. Неигровой персонаж — это объект, тарелка на столе и сам стол — тоже. Игрок может так или иначе взаимодействовать с объектами, или они могут видоизменяться в зависимости от происходящего в игре. Некоторые из них декоративные, другие сюжетно важны.
В Unity объект хранится в сущности под названием GameObject. У нее есть компоненты, значения которых можно изменять, и разнообразные настройки.
Префаб — это GameObject, сохраненный в виде ассета. В нем хранится объект со всеми свойствами. На основе префаба можно создавать уже вполне конкретные экземпляры этого объекта и размещать их в сцене. Каждый из них будет потомком префаба и останется связан с ним, поэтому, если изменить префаб, изменения применятся ко всем его потомкам.
Отличие от ассета
В Unity также есть понятие файлового ассета — это файл, в котором хранится шаблон для чего-либо, в том числе для объекта, текстуры или чего-то еще. Если изменить ассет, изменения точно так же применятся ко всем объектам, которые им пользуются. Их обычно не создают «изнутри» движка, а импортируют извне: из визуальных, звуковых и 3D-редакторов.
Файловый ассет и префаб — похожие понятия, но не идентичные. У них разная функциональность и свойства: например, к ассету нельзя добавлять компоненты. Префабы используют для создания непосредственно GameObject и его свойств, а ассеты — более широкое понятие: они могут включать в себя изображения, текстуры, звуки, трехмерные модели и другие файлы. С их помощью можно добавлять что угодно, что может использоваться в игре, — если Unity поддерживает соответствующий формат.
Как создавать префабы
Префабы создаются в редакторе движка Unity — в нем происходит большая часть работы со сценой. Нужно выбрать в меню редактора пункт Asset -> Create Prefab, и создастся «пустой» префаб. В него можно перетащить любой объект со сцены — и этот объект станет префабом, «шаблоном». В нем сохранятся не только свойства, но и вложенные объекты — они тоже сделаются частью шаблона. Объект, из которого вы создали префаб, станет его экземпляром и останется на сцене, а не исчезнет.
Когда префаб готов, его экземпляры можно создавать буквально одним кликом. Нужно нажать на нужный префаб в окне проекта и перетащить на сцену. Если необходимо, экземпляры префаба можно генерировать с помощью кода.
Названия экземпляров префаба на сцене подсвечиваются синим, а имена обычных объектов — черные. Так их можно различать.
Как редактировать префабы
Через окно проекта. Префабы отображаются в боковом окне, где показана структура проекта. Там для них можно создавать отдельные папки. Рекомендуется хранить префабы в отдельной папке и в ее подпапках, чтобы не запутаться в собственных объектах.
Окно проекта можно использовать для редактирования префаба. Для этого надо дважды кликнуть на его имя или нажать на стрелку рядом с названием. После этого откроется редактор изменения шаблона — там можно менять свойства и компоненты, и результаты будут применены ко всем экземплярам.
Через экземпляры. Также префаб можно отредактировать через его экземпляры. В меню экземпляра префаба есть следующие кнопки:
- Select — выделяет префаб, от которого унаследован объект. Позволяет не искать нужный шаблон в списке, что удобно, если префабов много;
- Revert — «откатывает» изменения, сделанные в конкретном экземпляре, до стандартных параметров префаба;
- Apply — применяет изменения, сделанные в конкретном объекте, ко всему префабу. Соответственно, изменяются все экземпляры.
Как заменять префабы
Префаб можно заменить, если перетащить в окно его редактирования другой объект. Например, в префабе хранился объект ложки. Если перетащить в его редактор объект вилки, он перезапишет предыдущий, и все ложки на сцене станут вилками.
С этой функцией стоит быть осторожнее: если в объектах возникнет конфликт имен, замена может пройти с ошибкой. Такое может произойти, например, если внутри объектов есть дочерние элементы с одинаковыми именами.
Как редактировать экземпляр префаба
Есть обратная задача: разработчику может понадобиться отредактировать отдельный экземпляр префаба, не внося при этом изменения в сам шаблон. То есть элемент изменится относительно стандартного префаба, но тот останется неизменным. Так тоже можно сделать.
Понадобится зайти в настройки объекта и переопределить свойства, которые вам нужны, но не трогать при этом редактор самого префаба. Просто не заходите в соответствующее меню.
Для отдельного объекта можно:
- добавить или удалить компонент;
- изменить значение какого-либо свойства;
- добавить дочерний объект.
Удалять имеющиеся дочерние объекты, которые входят в начальный шаблон, нельзя, равно как и переопределять «родителя» для экземпляров префаба. Но дочерние элементы можно отключать — обычно этого достаточно.
Группировка префабов
Удобное свойство префабов — их можно группировать и вкладывать друг в друга. Дочерним элементом префаба можно сделать другой префаб. В результате проект легко масштабируется, а для объектов создается удобная иерархия.
Например, можно создать префаб для НПС, неигрового персонажа. А после этого создать префаб для толпы, состоящий из целой группы разных НПС. Таким же образом можно создавать окружающую сцену и объекты вокруг: сначала двери и окна, потом дом, в который они входят, потом участок с несколькими домами.
Это полезно, потому что делает структуру проекта более детальной и логичной. К тому же такой подход облегчает работу в команде: одному человеку можно «отдать» мелкие детали, второму — крупные, а потом все без лишних сложностей «соберут» в один большой префаб.
Как начать пользоваться префабами
Префабы — важный и часто используемый инструмент создания сцены в Unity. Ими начинают пользоваться вскоре после начала изучения движка. Но перед тем как переходить к проектам на Unity, понадобится разобраться с языком программирования C#, на который ориентирован движок, и с основными принципами разработки игр. Хотя начинать тренироваться с движком можно параллельно с изучением языка программирования — так вы сразу будете узнавать и теорию, и практику.
Узнайте все нужные технологии для старта в геймдеве на наших курсах. Программу ведут профессионалы, которые обучат вас актуальным технологиям и практикам.
0 комментариев