Найти в Дзене

Что такое префаб в Unity

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

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

Например, в игре необходимо создать лес в двумерном проекте.

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

Рисунок 1. Создание игрового мира
Рисунок 1. Создание игрового мира

Такая иерархия объектов позволит нам, например, перемещать только родительский объект каменной скульптуры, а дочерние объекты травы будут перемещаться вместе с ним. Эту группу объектов мы хотим использовать много раз при построении игрового уровня.

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

Как создать префаб. Это можно сделать двумя способами. Для начала в панели файловой структуры проекта создадим папку с названием «Prefabs» – удобно, когда все ваши шаблоны собраны в одной папке. Подробнее про то, как создать новую папку можно почитать в статье https://dzen.ru/a/Zbd4hqTS2lcYoPXU Зайдите в эту папку.

Рисунок 2. Папка для префабов
Рисунок 2. Папка для префабов

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

Рисунок 3. Создание префаба
Рисунок 3. Создание префаба

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

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

Рисунок 4. Элемент подтверждения изменений
Рисунок 4. Элемент подтверждения изменений

Следующая кнопка «Select» для отображения свойств префаба сразу в инспекторе, а вторая кнопка «Open» для перехода в режим редактирования префаба.

Второй способ создания префаба с нуля. Для этого воспользуемся контекстным меню, которое открывается по клику правой клавиши мыши в правой части панели проекта. Выберем пункт «Create -> Prefab».

Рисунок 5. Создание префаба с нуля
Рисунок 5. Создание префаба с нуля

Рядом с уже существующим префабом появится новый файл, который имеет иконку просто куба, поскольку префаб пока пустой. Название префаба выделено, поэтому можно сразу изменить его на подходящее, в данном случае «T1» («Tree1»).

Рисунок 6. Объект префаба
Рисунок 6. Объект префаба

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

Откроем созданный пустой префаб. В этом случае позиция префаба всегда нулевая! Во избежание дальнейших проблем и ошибок, позицию у префабов лучше всегда выставлять в ноль.

Рисунок 7. Позиция префаба
Рисунок 7. Позиция префаба

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

Рисунок 8. Редактирование префаба
Рисунок 8. Редактирование префаба

Любому игровому объекту внутри префаба мы можем добавить необходимые компоненты при помощи кнопки «Add Component».

Рисунок 9. Редактирование префаба
Рисунок 9. Редактирование префаба

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

Чтобы вернутся к игровой сцене нажмите стрелку влево, расположенную в верхней части панели Иерархии.

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

Рисунок 10. Префаб из игрового объекта
Рисунок 10. Префаб из игрового объекта

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

Таким образом можно создавать префабы сложных игровых объектов для многократного использования при построении игрового мира.

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

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

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

Рисунок 11. Префаб снаряда для выстрела
Рисунок 11. Префаб снаряда для выстрела

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

Более подробно с приведением кода этот пример разобран в статье https://dzen.ru/a/ZdMauDkzZBE3Y77F