Prefab

Всем доброго времени суток, я сегодня продолжаю разбирать уроки по Unity3d и сегодня буду рассматривать такую вещь как Prefab.

 

Prefab это шаблон по которому можно создавать некоторые предметы на сцене. Давайте для начала сделаем Prefab, для этого открываем Unity3d и в окне Project в папке с нашим уроком, можно и не в нем но зачем путать, нажимаем правую кнопку и выбираем Create>Prefab и мы создали New Prefab. Это такая форма для Prefab.

 

Теперь давайте создадим какой-либо игровой объект, для этого нажимаем GameObject>3D Object>Cube. Я добавил куб на сцену. Теперь чтобы наполнить Prefab в нашу форму New Prefab перетаскиваем Cube. Просто берем Cube и перетаскиваем его в New Prefab. Вот у нас появился наш Prefab. То есть теперь строчкой кода мы можем вызывать этот новый New Prefab и он будет создавать клоны Cube на сцене. Сколько раз мы напишем данную строчку, столько клонов у нас появится, в нужных координатах, и под нужным углом.

 

Теперь давайте посмотрим на свойства самого Prefab который мы создали и вообще что с ним можно сделать. Во первых в окне Hierarchy он синего цвета. То есть все что создано Prefab в этом окне выделено синим. Если мы в окне Hierarchy выделим Cube то бишь Prefab, то в окне Inspector увидим что появилась строка Prefab, Select, Revert, Apply.

 

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

 

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

 

Apply наоборот, позволяет сохранить необходимые изменения, то есть если вы изменили размер, или еще чего, и хотите чтобы дальнейшие Prefab были такие же как тот что вы уже изменили, тогда просто нажимаете Apply и затем кнопкой Revert уже не сможете его изменить. Но и следующие уже будут такие как тот что вы создали.

 

Хочется верить что пока все понятно. Для чего необходимы Prefab? Ну к примеру, вы играете в стратегию, и заказали отряд воинов и в проекте хранится Prefab с воином, который затем клонируется.

 

Теперь давайте рассмотрим как он вызывается при помощи кода. Открываем наш скрипт урока и пишем вот такой скрипт:

Используем Prefab кодом
Dante

 

Как видите мы объявляем новую переменную public GameObject cubePref это будет переменная в которую мы поместим наш Prefab. Данная переменная обязательно публичная, для того чтобы она отображалась. Переходим в Unity и перетаскиваем созданный скрипт на камеру, и видим что в настройках скрипта появилась строка Cube Pref, это в окне Inspector. Как видите есть строка Cube Pref None (Game Object), нажимаем на кружочек рядом и выбираем наш Prefab, то есть New Prefab. Еще можно перетащить его туда прямо из окна Project, тут как удобней. Вот мы и объявили эту переменную. Так же это можно сделать при помощи кода, но как это сделать я скажу потом. Надеюсь сейчас для вас это не так важно.

 

Давайте теперь напишем программу, которая будет просто брать и создавать на сцене один Prefab. Удаляем наш куб со сцены в Unity. Открываем скрипт с уроком и пишем, для начала в функции Start создаем новую переменную GameObject, пусть она будет приватной и будет только в этой функции, поскольку мы её использовать толком не будем. Назовем её cube и приравняем её к функции Instantiate, и дальше есть два способа её указать. Мы можем в скобках указать путь к нашему Prefab и он выведет на сцену Prefab с координатами которые были заданы с ним когда он создавался, либо укажем координаты сами, давайте укажем их сами. Сначала пишем cubePref, через запятую в скобочках пишем new Vector3 и в скобочках еще одних задаем координаты, пусть это будет 1, 2, 3. Затем закрываем обе скобочки координат ставим запятую и пишем Quaternion, это поворот нашего Prefab, то есть угол, дальше точка и пишем identity, что значит что поворота не будет. Закрываем скобку что открыта у cubePref, и пишем as GameObject, ставим точку с запятой. Здесь as GameObject говорит что необходимо создать переменную именно этого типа, то есть типа GameObject. Именно игровой объект. У вас должен получится вот такой скрипт:

Создание Prefab через скрипт
Dante

 

Теперь сохраняем наш скрипт, и запускаем игру в Unity3d, не забываем чтобы скрипт был навешен на камеру. И видим что успешно создается новый игровой объект New Prefab(Clone).

 

Теперь давайте сделаем два Prefab на сцене, для этого просто скопируем строку GameObject cube = Instantiate (cubePref, (new Vector3 (1, 2, 3)), Quaternion.identity) as GameObject; изменим название cube, на cube1 и изменим координаты, обратно сохраним у меня вышло вот такое:

Скриптом создаем два Prefab
Dante

 

Теперь обратно запускаем игру в Unity3d и видим что создалось два объекта New Prefab(Clone). Вот так создалось два объекта в тех координатах которые мы задали. Ну что еще сказать, если не нравится название New Prefab(Clone) то можно дописать скрипт вот так и задать имя:

Изменяем имя для Prefab
Dante

 

Как можете видеть я задал имя для cube1 и назвал его «Platfom«. Сохраняем запускаем и видим что создался один объект New Prefab(Clone), а второй Platfom.

Хочется верить что, то что я написал было понятно, до новых статей.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *