Использование префабов в Unity. #18

Unity    2018-04-02 16:39:31     тег: Курс по Unity

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

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

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

С технической точки зрения, префаб - это уже готовый игровой объект который прошел процесс создания и готов к использованию. 
Создается префаб очень просто. Достаточно перетянуть объект с вкладки Hierarchy на вкладку Project.

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

public static Object Instantiate(Object original);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);

Разберем создание префаба из объекта бочка. У меня на сцене есть объект Barrel, который состоит из пары полигональных объектов, barrelMetal_low и barrelWood_low, пустого объекта GameObject к которому добавлены компоненты Rigidbody и Capsule Collider.

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

Скачать модель бочки вы сможете на сайте vetalkov.com, или заменить используя примитивные объекты. 

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

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

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

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

Создается префаб очень просто. Достаточно перетянуть объект с вкладки Hierarchy на вкладку Project.

Для размещения префаба создайте на вкладке Project папку Prefabs. 

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

После чего перетяните его с вкладки Hierarchy в папку Prefabs. В итоге у вас появится префаб в папке Prefabs.

Теперь его можно использовать нужное количество раз, просто перетянув с вкладку Hierarchy на сцену или просто дублировав. 

В выбранном месте появится префаб бочки со всеми компонентами.

Чтобы отличить обычную модель бочки от префаба, выберите ее на вкладке Hierarchy и переключите свое внимание на вкладку Inspector. 

В верхней части вкладки Inspector находится надпись, поясняющая, модель это или префаб, а за надписью следует блок кнопок Select, Revert, Apply, которые означают - выбрать исходный префаб, вернуть предыдущие значения или применить внесенные изменения.

Эти кнопки присутствуют если вы выбираете префаб на вкладке Hierarchy, и это значит, что если вы внесете в него изменения, то они передаются всем префабам на сцене и главному префабу который в папке Project, только после нажатия кнопки Apply. 

Если изменить главный префаб, тот который на вкладке Project, то изменения вступят в силу автоматически ко всем объектам на сцене. 

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

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

Рассмотрим это на примере. Создадим над поверхностью 18 бочек, в которых нужно будет изменить свойство Drag.

Запустим код на выполнение. Теперь все бочки падают быстро под силой тяжести. Если нам нужно, чтобы все бочки падали медленнее, достаточно изменить значение Drag в префабе на вкладке Project. 

Также это можно сделать изменив любой префаб на вкладке Hierarchy, не забыв потом нажать кнопку Apply.

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

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

Те кто уже знаком с использованием скриптов я покажу как создавать префаб в скрипте. Удалим префаб и все бочки оставив одну, которая будет расположена над поверхностью и сделаем из нее префаб. 

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

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

Создадим скрипт и повесим его на персонажа, затем откроем для редактирования. Добавим переменную barell типа GameObject в которую передадим позже ссылку на префаб. 

Напишем функцию OnMouseDown, которая реагирует на нажатие мышкой  и вызовем функцию Instatiate передав ей ссылку на префаб. 
 
Перейдем в редактор Unity выбираем персонажа и на вкладке Inspector в свойство barrel скрипта MyScript перетянем префаб.

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

Плюс использования префабов заключается ещё и в том, что вам не надо постоянно хранить их в памяти занимая место. 

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