Префаб

Префаб (prefab) — это шаблон для объекта в игровом движке Unity. С помощью префабов можно создать «образец» предмета с определенными свойствами, а потом использовать такие предметы на всей игровой сцене. Если изменить префаб, то изменятся все объекты, созданные на его основе.

В префабе хранится какой-либо объект со всеми свойствами и характеристиками. В движке всегда можно создать один или несколько «элементов», унаследованных от префаба, и модифицировать их.

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

Шаблоны в Unity называются ассетами (assets), поэтому иногда можно услышать определение, что префаб — это ассет для игрового объекта. Оно тоже верное.

Кто пользуется префабами и для чего они нужны

Префабами активно пользуются геймдев-разработчики на Unity. Они намного удобнее, чем простое «размножение» объектов копипастом. Ведь все объекты префаба наследуются от шаблона, поэтому, если понадобится изменить что-то в них всех, достаточно видоизменить сам префаб. А еще это позволяет легко создавать похожие друг на друга объекты, например толпу неигровых персонажей или какие-то шаблонные элементы ландшафта.

Префабы нужны:

  • для структурирования и оптимизации процесса разработки;
  • для облегчения работы в команде — так проще распределять и координировать задачи;
  • для гибкого создания похожих друг на друга, но при этом уникальных элементов;
  • для легкого изменения свойств или поведения всех объектов разом — например, в игровом городе наступает ночь и окна в домах начинают светиться;
  • для создания четкой и понятной иерархии объектов благодаря возможности группировать и вкладывать префабы друг в друга.

Как работают префабы

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

В Unity объект хранится в сущности под названием GameObject. У нее есть компоненты, значения которых можно изменять, и разнообразные настройки.

Префаб — это GameObject, сохраненный в виде ассета. В нем хранится объект со всеми свойствами. На основе префаба можно создавать уже вполне конкретные экземпляры этого объекта и размещать их в сцене. Каждый из них будет потомком префаба и останется связан с ним, поэтому, если изменить префаб, изменения применятся ко всем его потомкам.

Отличие от ассета

В Unity также есть понятие файлового ассета — это файл, в котором хранится шаблон для чего-либо, в том числе для объекта, текстуры или чего-то еще. Если изменить ассет, изменения точно так же применятся ко всем объектам, которые им пользуются. Их обычно не создают «изнутри» движка, а импортируют извне: из визуальных, звуковых и 3D-редакторов.

Файловый ассет и префаб — похожие понятия, но не идентичные. У них разная функциональность и свойства: например, к ассету нельзя добавлять компоненты. Префабы используют для создания непосредственно GameObject и его свойств, а ассеты — более широкое понятие: они могут включать в себя изображения, текстуры, звуки, трехмерные модели и другие файлы. С их помощью можно добавлять что угодно, что может использоваться в игре, — если Unity поддерживает соответствующий формат.

Как создавать префабы

Префабы создаются в редакторе движка Unity — в нем происходит большая часть работы со сценой. Нужно выбрать в меню редактора пункт Asset -> Create Prefab, и создастся «пустой» префаб. В него можно перетащить любой объект со сцены — и этот объект станет префабом, «шаблоном». В нем сохранятся не только свойства, но и вложенные объекты — они тоже сделаются частью шаблона. Объект, из которого вы создали префаб, станет его экземпляром и останется на сцене, а не исчезнет.

Когда префаб готов, его экземпляры можно создавать буквально одним кликом. Нужно нажать на нужный префаб в окне проекта и перетащить на сцену. Если необходимо, экземпляры префаба можно генерировать с помощью кода.

Названия экземпляров префаба на сцене подсвечиваются синим, а имена обычных объектов — черные. Так их можно различать.

Как редактировать префабы

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

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

Через экземпляры. Также префаб можно отредактировать через его экземпляры. В меню экземпляра префаба есть следующие кнопки:

  • Select — выделяет префаб, от которого унаследован объект. Позволяет не искать нужный шаблон в списке, что удобно, если префабов много;
  • Revert — «откатывает» изменения, сделанные в конкретном экземпляре, до стандартных параметров префаба;
  • Apply — применяет изменения, сделанные в конкретном объекте, ко всему префабу. Соответственно, изменяются все экземпляры.

Как заменять префабы

Префаб можно заменить, если перетащить в окно его редактирования другой объект. Например, в префабе хранился объект ложки. Если перетащить в его редактор объект вилки, он перезапишет предыдущий, и все ложки на сцене станут вилками.

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

Как редактировать экземпляр префаба

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

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

Для отдельного объекта можно:

  • добавить или удалить компонент;
  • изменить значение какого-либо свойства;
  • добавить дочерний объект.

Удалять имеющиеся дочерние объекты, которые входят в начальный шаблон, нельзя, равно как и переопределять «родителя» для экземпляров префаба. Но дочерние элементы можно отключать — обычно этого достаточно.

Группировка префабов

Удобное свойство префабов — их можно группировать и вкладывать друг в друга. Дочерним элементом префаба можно сделать другой префаб. В результате проект легко масштабируется, а для объектов создается удобная иерархия.

Например, можно создать префаб для НПС, неигрового персонажа. А после этого создать префаб для толпы, состоящий из целой группы разных НПС. Таким же образом можно создавать окружающую сцену и объекты вокруг: сначала двери и окна, потом дом, в который они входят, потом участок с несколькими домами.

Это полезно, потому что делает структуру проекта более детальной и логичной. К тому же такой подход облегчает работу в команде: одному человеку можно «отдать» мелкие детали, второму — крупные, а потом все без лишних сложностей «соберут» в один большой префаб.

Как начать пользоваться префабами

Префабы — важный и часто используемый инструмент создания сцены в Unity. Ими начинают пользоваться вскоре после начала изучения движка. Но перед тем как переходить к проектам на Unity, понадобится разобраться с языком программирования C#, на который ориентирован движок, и с основными принципами разработки игр. Хотя начинать тренироваться с движком можно параллельно с изучением языка программирования — так вы сразу будете узнавать и теорию, и практику.

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

Другие термины на букву «П»

Пайплайн
Парсер
Пентест

Все термины

Курсы по теме

(рейтинг: 5, голосов: 3)
Добавить комментарий