Префаб – это шаблон игрового объекта со всеми его компонентами, значениями свойств и дочерними объектами, на основе которого можно создавать игровые объекты на сцене. Префабы помогают ускорить и упростить работу разработчику игр.
Например, в игре необходимо создать лес в двумерном проекте.
Используем спрайт скульптуры из камней для родительского объекта, а к нему добавим еще два дочерних объекта со спрайтами травы. В панели Иерархии эта структура выделена оранжевым цветом, а на сцене – синим.
Такая иерархия объектов позволит нам, например, перемещать только родительский объект каменной скульптуры, а дочерние объекты травы будут перемещаться вместе с ним. Эту группу объектов мы хотим использовать много раз при построении игрового уровня.
Самое простое, что приходит в голову – это много раз заново создавать родительский объект скульптуры, менять ему масштаб, угол поворота, добавлять дочерние объекты травы, которые тоже требуют настройки позиции, поворота и масштаба. Если нам понадобиться 20 таких объектов, то 20 раз нам придется делать одно и то же. Но используя префабы, мы можем один раз создать шаблон объекта скульптуры вместе с травой и использовать его потом столько раз, сколько потребуется.
Как создать префаб. Это можно сделать двумя способами. Для начала в панели файловой структуры проекта создадим папку с названием «Prefabs» – удобно, когда все ваши шаблоны собраны в одной папке. Подробнее про то, как создать новую папку можно почитать в статье https://dzen.ru/a/Zbd4hqTS2lcYoPXU Зайдите в эту папку.
Переходим к созданию префаба. В данном случае у нас уже есть готовый игровой объект, из которого нужно создать шаблон. Перетащите мышкой родительский игровой объект из панели иерархии в папку «Prefabs». Очень важно, что объект нужно перетаскивать из панели иерархии, а не со сцены!
В папке «Prefabs» появится новый файл префаба, иконка которого отображает объект, который в нем хранится. Слева от имени файла есть значок синего кубика, который означает, что данный файл является префабом.
В инспекторе игрового объекта автоматически появилась строка, в которой указано, что данный игровой объект связан с префабом. Чуть ниже представлены элементы управления объектом и префабом. Первый список «Overrides» используется для подтверждения внесенных изменений в игровой объект или префаб. Сейчас игровой объект и префаб полностью синхронизированы, поэтому никаких изменений в списке нет.
Следующая кнопка «Select» для отображения свойств префаба сразу в инспекторе, а вторая кнопка «Open» для перехода в режим редактирования префаба.
Второй способ создания префаба с нуля. Для этого воспользуемся контекстным меню, которое открывается по клику правой клавиши мыши в правой части панели проекта. Выберем пункт «Create -> Prefab».
Рядом с уже существующим префабом появится новый файл, который имеет иконку просто куба, поскольку префаб пока пустой. Название префаба выделено, поэтому можно сразу изменить его на подходящее, в данном случае «T1» («Tree1»).
Двойным кликом по файлу префаба осуществляется переход в панель редактирования префабов, где можно работать с префабом как с игровым объектом, изменяя его свойства и редактируя структуру и список компонентов.
Откроем созданный пустой префаб. В этом случае позиция префаба всегда нулевая! Во избежание дальнейших проблем и ошибок, позицию у префабов лучше всегда выставлять в ноль.
Теперь можно создать в префабе иерархию из игровых объектов, просто перетаскивая мышкой нужные спрайты в центральную область.
Любому игровому объекту внутри префаба мы можем добавить необходимые компоненты при помощи кнопки «Add Component».
Таким образом мы получим шаблон сложного игрового объекта, который будем использовать много раз при построении игровых уровней.
Чтобы вернутся к игровой сцене нажмите стрелку влево, расположенную в верхней части панели Иерархии.
Вернемся в папку «Prefabs» и откроем префаб, созданный из игрового объекта. У этого префаба позиция равна позиции игрового объекта, из которого он был создан.
В этом случае необходимо самостоятельно изменить позицию префаба, установив ее в ноль.
Таким образом можно создавать префабы сложных игровых объектов для многократного использования при построении игрового мира.
Но самое главное назначение префабов – это создание шаблонов игровых объектов в скриптах. Например, стрельба, когда нужно создавать по нажатию клавиши объекты пуль или снарядов. Или генерация вражеских объектов в определенной позиции. Или создание объекта взрыва на месте столкновения. В таких случаях без префабов очень сложно обойтись.
Рассмотрим механизм реализации стрельбы. При стрельбе необходимо генерировать игровые объекты пуль, лазеров, ракет и пр. при нажатии клавиши пользователем. При этом пока персонаж не стреляет на сцене не должно находиться ни одного снаряда стрельбы.
В этом случае создается префаб этого снаряда и полностью настраивается его поведение – его перемещение, уничтожение, взаимодействие с другими объектами и т.д.
Затем в скрипте персонажа при реализации выстрела генерируется игровой объект префаба. Благодаря тому, что префаб уже настроен нужным образом, не нужно задумываться о его дальнейшем поведении. Просто нужно создать столько снарядов, сколько раз пользователь нажмет клавишу выстрела. Все сгенерированные снаряды будут являться копиями префаба снаряда, а значит будут вести себя одинаково.
Более подробно с приведением кода этот пример разобран в статье https://dzen.ru/a/ZdMauDkzZBE3Y77F