Unity как изменить префаб

Редактирование PrefabТип ресурса, который позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов в сцене. Подробнее Посмотрите в Словарь, откройте его в Готовый режим. Prefab Mode позволяет просматривать и редактировать содержимое Prefab Asset отдельно от любых других GameObjectsфундаментальных объектов в сценах Unity, которые может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее См. Словарь в вашем СценаСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее См. в Словарь. Изменения, которые вы вносите в Prefab Mode, влияют на все экземпляры этого Prefab.

Редактирование PrefabТип ресурса, который позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов в сцене. Подробнее
Посмотрите в Словарь
, откройте его в Готовый режим. Prefab Mode позволяет просматривать и редактировать содержимое Prefab Asset отдельно от любых других GameObjectsфундаментальных объектов в сценах Unity, которые может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. Словарь
в вашем СценаСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
. Изменения, которые вы вносите в Prefab Mode, влияют на все экземпляры этого Prefab.

Вход в режим Prefab и выход из него

Вы можете редактировать готовый объект изолированно или в контексте.

Слева: изолированное редактирование префаба. Справа: редактирование *Prefab в контексте.

Слева: изолированное редактирование префаба. Справа: редактирование *Prefab в контексте..
  • Изолировано: когда вы редактируете префаб изолированно, Unity скрывает остальную часть вашей текущей рабочей сцены, и вы видите только те игровые объекты, которые относятся к самому префабу (плюс, при необходимости, предварительно установленный среда редактирования — см. ниже).

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

Изолированное редактирование

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

  • Дважды щелкните Prefab Asset в окне проекта.
  • Выберите сборный ресурс в окне проектаокне, в котором отображается содержимое вашего Папка Assets (вкладка Project) Подробнее
    См. в Словарь
    и нажмите кнопку Открыть сборку Кнопка в Инспектореокне Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта. , что позволяет просматривать и редактировать значения. Подробнее
    См. в окне Словарь

Prefab Asset, выбранный в окне проекта (слева), и кнопка Open Prefab, видимая в инспекторе (справа)

Prefab Asset, выбранный в окне проекта (слева), и кнопка Open Prefab, видимая в инспекторе (справа)

Когда вы входите в режим Prefab изолированно, Unity показывает содержимое этого Prefab только в виде сценыAn интерактивный взгляд на мир, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Дополнительная информация
См. в Словарь
и в окне Иерархия. На следующем изображении корнем префаба является обычный GameObject — он не имеет синего значка экземпляра префаба.

Представление «Сцена» и иерархия с изолированным режимом Prefab

Представление «Сцена» и иерархия с изолированным режимом Prefab

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

Панель навигации в верхней части представления «Сцена», видимая в режиме Prefab.

Панель навигации в верхней части представления «Сцена», видимая в режиме Prefab.

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

Стрелка назад в строке заголовка окна Hierarchy, видимая в Prefab Mode

Стрелка назад в строке заголовка окна Hierarchy, видимая в Prefab Mode

Редактирование в контексте

Кроме того, вы можете открыть сборный ресурс в контексте через экземпляр этого сборного объекта. Способы сделать это включают:

  • Выберите экземпляр Prefab в окне Hierarchy и нажмите кнопку Открыть в окне Inspector.
  • Выберите экземпляр Prefab в окне Hierarchy и нажмите P на клавиатуре. Это привязка клавиатуры по умолчанию.
  • Используйте кнопку со стрелкой рядом с экземпляром Prefab в окне Hierarchy

Кнопка «Открыть» в Инспекторе, когда выбран экземпляр префаба

Кнопка «Открыть» в Инспекторе, когда выбран экземпляр префаба
Кнопка со стрелкой рядом с префабом в окне иерархии
Кнопка со стрелкой рядом с префабом в окне иерархии

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

  • Обычный – показывает контекст в обычных цветах.
  • Серый: контекст отображается в оттенках серого.
  • Скрытый – полностью скрывает контекст, чтобы был виден только контент Prefab.

Элементы управления Prefab Mode на панели Prefab в верхней части представления «Сцена», включая элемент управления «Контекст» и переключатель «Показать переопределения».

Элементы управления Prefab Mode на панели Prefab в верхней части представления «Сцена», включая элемент управления «Контекст» и переключатель «Показать переопределения».

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

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

Вы не можете редактировать эти значения в Prefab Mode в контексте. Если вам нужно отредактировать их, вы можете либо открыть префаб изолированно, либо выбрать префаб-ассет в окне проекта и отредактировать значения в инспекторе.

Помимо корневых свойств Transform, вы также можете переопределить другие свойства экземпляра Prefab, что может кардинально изменить его внешний вид по сравнению с Prefab Asset, экземпляром которого он является. Чтобы предварительно просмотреть эти переопределенные значения из экземпляра Prefab, находясь в режиме Prefab в контексте, включите переключатель Показать переопределения на панели Prefab. Пока этот параметр включен, любые свойства, которые вы переопределяете в экземпляре Prefab, отображаются таким же образом в контекстах Prefab, и вы не можете их редактировать. Чтобы изменить эти свойства, снова отключите переключатель Показать переопределения.

Автосохранение

Режим Prefab имеет параметр Автосохранение в правом верхнем углу представления сцены. Когда он включен, Unity автоматически сохраняет любые изменения, которые вы вносите в Prefab, в Prefab Asset. Автосохранение включено по умолчанию.

Переключатель «Автосохранение» в правом верхнем углу представления «Сцена» в режиме «Сборный».

Переключатель «Автосохранение» в правом верхнем углу представления «Сцена» в режиме «Сборный».

Если вы хотите внести изменения без автоматического сохранения этих изменений в предустановленном ресурсе, снимите флажок Автосохранение. В этом случае Unity спросит вас, хотите ли вы сохранить несохраненные изменения или нет, когда вы выходите из Prefab Mode для текущего Prefab. Если редактирование префаба в режиме префаба кажется медленным, может помочь отключение автоматического сохранения.

Переключение между изолированным и контекстным режимом

Когда вы открываете Prefab Mode через Prefab Asset, Unity отображает содержимое Prefab изолированно. Однако при открытии Prefab Mode через экземпляр Prefab в окне Hierarchy открывается Prefab Mode in Context.

Когда вы таким образом открываете Prefab Mode, вы можете видеть контекст экземпляра Prefab в представлении Scene, даже если вы редактируете не экземпляр, а сам Prefab Asset. Например, если вы открываете Prefab Mode в контексте через экземпляр Prefab в сцене, вы можете видеть окружение в этой сцене во время редактирования Prefab. Префаб также показан с теми же условиями освещения, что и в Сцене.

Префаб, открытый в режиме префабов в контексте, с окружающим контекстом, отображаемым в оттенках серого.

Префаб, открытый в режиме префабов в контексте, с окружающим контекстом, отображаемым в оттенках серого.

Если у вас есть экземпляр Prefab, который вы не хотите открывать в контексте, а хотите открыть изолированно, удерживайте нажатой клавишу Alt и нажмите кнопку Открыть или кнопку со стрелкой, чтобы открыть Prefab Mode. Вы также можете настроить собственный ярлык в окне Ярлыки для команды Стадия > Редактировать префаб в изоляции.

Отменить

Когда вы вносите изменения в сборный ресурс в режиме сборки, вы можете отменить эти изменения только в режиме сборки. После того как вы выйдете из режима Prefab Mode для данного Prefab Asset, ваши изменения, относящиеся к этому Prefab Asset, больше не будут доступны в истории отмен.

Редактирование среды

Вы можете назначить сцену в качестве среды редактирования, которая будет использоваться в сборном режиме в изоляции. Это позволяет вам редактировать префаб на выбранном вами фоне, а не на пустой сцене. Это может быть полезно, чтобы увидеть, как ваш префаб выглядит на фоне выбранного вами пейзажа. Unity использует эту среду редактирования только тогда, когда вы открываете Prefab Mode в изоляции.

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

Чтобы установить сцену в качестве среды редактирования, откройте окно Editor (верхнее меню : Edit > Project Settings, затем выберите категорию Editor) и перейдите в раздел Prefab Editing Environment. Используйте параметр Обычная среда для префабов, не связанных с пользовательским интерфейсом, и параметр Среда пользовательского интерфейса для префабов пользовательского интерфейса. Префабы пользовательского интерфейса — это те, которые имеют в корне компонент Rect Transform, а не обычный компонент Transform. компонент. Префабы «без пользовательского интерфейса» — это те, которые имеют обычный компонент Transform.

Настройки среды редактирования префабов в настройках проекта редактора

Настройки среды редактирования префабов в настройках проекта редактора

Время прочтения
8 мин

Просмотры 4.9K

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

Что такое префаб?

В юнити довольно много удобных инструментов работы с данными, один из которых – префаб. По сути в Unity есть два вида конфигов с визуальным интерфейсом для манипулирования ими. Prefab и ScriptableObject. Если Scriptable Object больше про чистое хранение данных, то Prefab по сути конфиг “аналогичный xaml” в UWP, который позволяет реализовывать концепцию MVVM, и является в ней View. Мне в целом нравится архитектура, когда префабы – это View, компоненты – View-Model, а Scriptable Object – модель. Это довольно удобно. Но в любой другой схеме архитектуры по MVP, MVC и т.п. можно префабы считать за View.

Под капотом префаб или скриптабл обжект – это YAML конфиг. Если в Unity включена текстовая сериализация в настройках редактора то его даже можно открыть и почитать.

Структурно он обычно состоит из ссылок на другие префабы, файлы, скрипты и т.п. и наборы сериализуемых параметров. При этом тут стоит сразу сделать отступление на что такое Prefab Variant. Это такой же YAML конфиг, который похож на префаб в своей сути, но он хранит ссылку на оригинальный префаб m_SourcePrefab и его модификации m_Modification + удалённые компоненты m_RemovedComponents.

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

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

Базовые элементы

Разберём все рекомендации на простом пользовательском интерфейсе. Предположим что у нас скажем есть: магазин и награда за квест. Подобный пример позволит нам получить случаи использования похожие на правду и некоторые примеры того, какие проблемы могут возникать. Как и театр начинается с вешалки, сборка интерфейса всегда должна начинаться со сборки базовых элементов. Кнопки, задники окон, рамки предметов и т.п. Что считать базовым элементом зависит от конкретного интерфейса.

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

Я собрал кнопку из кучи кружков, потому что на самом деле про интерфейс можно сказать так: «Дайте мне один кружок и на нём можно собрать очень много вариантов интерфейса». При этом это очень удобный концепт, так как весить такой интерфейс будет примерно ничего. В дальнейшем кроме каких-то иконок все базовые панели мы так же соберём с помощью одного спрайта-кружка. Вот пример вариантов кнопок:

Теперь соберём по аналогичному принципу фон для окна.

В данном случае у них есть некоторый “общий элемент” bg-circle-shadow. Его конечно же можно вынести в отдельную компоненту, чтобы пакетно красить тени, менять их реализацию и т.п. Но по опыту в разных сущностях лучше не обобщать такие элементы, так как именно из-за этого потом возникают проблемы “я поменял кнопку, а сломались все окна”. Изменение префабов с помощью инструментов Unity — слишком простое действие. Но тем не менее не хочется терять возможность пакетной обработки. Поэтому лучше заранее продумать контракты названий и манипулировать пакетно либо скриптами, либо в ручную, но осознанно меняя в определённых местах. Такие вещи на самом деле не так сложно читать на ревью в мерж реквестах, когда названия совпадают или имеют нечто общее. Так что разбор всего уж совсем на молекулы – это, как и в коде, излишняя декомпозиция, которая ведёт в будущем к неочевидным проблемам. Сущности должны быть разделены логически. И совсем базовые компоненты не должны пересекаться. Ну почти, но мы этого коснёмся чуть позже. 

Из базовых элементов мы собрали всё, кроме “игрового предмета”.

Он аналогичен. Так сказать из того, что можно собрать на стоках, собрали для иллюстрации. Перед тем как начать собирать окна, немного ещё по базовым элементам. Базовые элементы интерфейса – это не эффекты или какие-то поведения на мой взгляд, чтобы с ними было удобно работать, а конкретные базовые сущности. Фоны, кнопки, прогресс бары для интерфейса. Персонажи, мечи, игровые объекты – которые могут повторяться и удобно редактировать пакетом. Основной плюс сборки сразу такого UI кита заключается в том, что дальше окна уже собираются довольно быстро, так как по сути это копирование и изменение значений, но основные ингредиенты окна уже собраны. Итак, начнём собирать окна.

Композиция или Nested Prefabs

Перед сборкой стоит рассказать про композицию и Nested Prefabs. В самой сборке нет ничего особо интересного, она скорее представлена для иллюстрации концепта. Префабы как сущность в движке обладают одной проблемой. Из-за того, как просто ими манипулировать, собирать и управлять, то многие очень халатно подходят к сборке и не учитывают насколько это важный элемент, который при правильном структурировании и аккуратной работе с ним может сэкономить в будущем уйму времени. По сути в Unity сейчас есть два механизма для работы с префабами композиция (Nested Prefabs) и наследование (Prefab Variance) и относится к ним нужно так же, как и к тем же механизмам в коде. Только с ещё с большей осторожностью, так как в префабах в принципе нет “защиты от дурака” Префаб просто позволяет определять View и делать биндинги без кода, но это всё ещё View. И всё ещё те же механизмы встречающиеся в разработке и их проблемы.

С композицией всё довольно просто. Она не всегда удобна, излишняя композиция ведёт к проблемам которые я описывал для базовых элементов и теней. То есть любой объект должен быть разбит на логические сущности. Если что-то присуще только этому окну – нет смысла выносить это в отдельный префаб. Самый простой способ определить это задать себе вопрос. Если я изменю этот элемент мне придётся менять это окно? Как можно заметить в базовых элементах у нас скажем не было заголовков окон. Если у окон нет некоей обобщённой вёрстки, то чаще всего мы не может рассуждать так:

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

Идея, имеет место быть. Но в среднем по опыту такой подход ведёт к тому, что разработка узнаёт от тестеров о том, что “а вот тут сломался такой то экран, текст теперь залезает туда”. И это и есть излишняя декомпозиция. Всё зависит от конкретного случая, иногда окна скажем можно разбить на повторяющиеся виджеты, которые просто складываются друг на друга через horizontal layout, если дизайн такие молодцы и так сделали. Но это скорее исключение чем правило.

Соберём из наших компонент префаб окна награды за квест (я бы конечно ещё поиграл со шрифтами и хедером, но это только для статьи так что попрёт)

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

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

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

Третье – тут это не так хорошо видно, но организация папок с текстурами. Unity sprite atlas позволяет передавать папку в качестве параметра с текстурами. Поэтому если какие-то текстуры принадлежат какому-то игровому экрану, то лучше класть их в отдельную подпапку. Перед релизом игры может встать задача оптимизации интерфейсов. И тогда это так же сэкономит кучу времени, так как допустим одна из оптимизаций – это сгруппировать текстурные атласы по игровым экранам, чтобы уменьшить число draw call на интерфейс. Так как для того, чтобы интерфейс рисовался в скажем 1 dc одно из требований, чтобы все спрайты этого интерфейса лежали в одном атласе. Я в примере буду во всех экранах использовать одни и те же текстуры, так что у меня этого разделения нет.

Наследование или Prefab Variants

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

Соберём теперь окно для магазина:

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

Важно: для окна квеста мы создали новый вариант game-item-quest-reward и он унаследован от game-item, так же как и game-item-shop унаследован от game-item. Очень частая ошибка, что если делается первым скажем окно QuestPanel, то там остаётся базовый game-item, или получается цепочка наследования game-item->game-item-quest-reward->game-item-shop, что в свою очередь очень плохо с точки зрения проектировки. Так как игровой предмет магазина по логике не должен зависеть от предмета в окне награды за квест. Они могут опираться оба на один базовый, но ни в коем случае нельзя строить такую зависимость. Хотя интерфейс Unity к этому подталкивает.

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

Ещё стоит обратить внимание, что структурно фон карточки сейчас – это тот же фон окна. Но тогда почему это отдельный префаб? Потому что это отдельная логическая сущность никак не связанная с фоном окна, и не должна изменяться вместе с изменением фона окна. А почему это не вариант, как сделано с игровым предметом? Так можно сделать, тут уже вопрос к тому насколько вы считаете эти сущности разными. Я считаю это рискованным при горизонтальном масштабировании, так как когда таких сущностей не 2-3, а 20-30 трудно следить за их изменениями. А при этом для пакетной обработки можно пройтись по ним скриптом, либо руками.

В заключении

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

В разработке, и префабы не исключение, есть базовый конфликт. С одной стороны хочется, чтобы правки меняли только тот модуль, который исправляется. Это упрощает разработку и не вызывает неочевидных багов, когда правка касается только конкретного модуля. А с другой стороны хочется удобства, чтобы из-за “дублирования” не приходилось одно и тоже при ошибке менять в каждом месте всей системе. И любая разработка – это компромисс между этими двумя стульями.

В общем резюмируя:

  1. Следите за названиями объектов

  2. Не делайте слишком глубокую иерархию вариантов и разделяйте их логически

  3. Для базовых элементов, виджетов собираемых в окно лучше использовать Nested Prefabs и композицию

  4. Не обманывайтесь интерфейсом и простотой редактирования. За префабами надо следить не меньше чем за кодом

Собранные префабы вы найдёте в этом репозитории, где можно посмотреть на организацию. Спасибо за внимание!

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

Вступление

Начнем с пересказа основ префабов в Unity. Фундаментально, ассеты префабов в Unity — это как шаблоны игровых объектов и их Child-ов. Вы можете создавать множество копий префабов на сцене. Если ассет был изменен, то все размещенные префабы на сцене также будут соответственно обновлены.

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

Для решения многих проблем были введены несколько важных новых фич. Была реализована обратная совместимость префабов, так что теперь они поддерживают вложенность и наследование. Была улучшена визуализация свойств и обьектов, которые переопредлеяются конкретным префабом размещенным на сцене. Также была добавлена возможность применения переопределения параметров на разном уровне: на каждое свойство, на весь компонент или игровой объект или как ранее на весь объект префаба на сцене. И напоследок — добавлен новый режим Prefab Mode для возможности изолированного редактирования префаба.

Prefab Mode

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

Режим работы с префабом дает вам больший контроль редактирования ассета, поэтому что вы можете производить любые изменения, включая структурные без странных диалогов предупреждающих вас, что связь с ассетом будет потеряна. В новом режиме вам больше не нужно будет производить временные изменения над инстансом префаба с применением этих изменений потом на сам ассет (с возможностью получить какие-либо сайд эффекты в зависимости от прошлых переопределений значений). Рекомендуется теперь использовать именно Prefab Mode для изменения ассета. Также был улучшен процесс переопределения свойств объекта.

Prefab Mode отделяет иерархию и вид сцены для показа ассета в изоляции. Вы можете теперь легко понять, что находитесь в новом режиме благодаря новой шапке в иерархии и окне вида сцены. Кроме того, фоновый цвет может быть настроен в настройках :)

Введение в новый процесс работы с префабами — Unity — DevTribe: инди-игры, разработка, сообщество (блог.unity, Перевод, перевод, префабы)

Работа с ассетами префабов

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

Работа с объектами префабов на сцене

Теперь для реализации наследования префабов вы больше не можете отсоеденить инстанс префаба для произведения структурных изменения. Вам необходимо удалить игровой объект, пересоздать с нужной иерархией через изменение связки с Transform или Rect Transform или чем-то подобным. Но вы теперь можете делать все эти вещи более удобным способом в режиме редактирования префабов — Prefab Mode. А также вы можете распаковать префаб, превратив его в обычный набор объектов на сцене и делать с ним все что угодно.

Предварительная сборка

Был введен новый термин — «stage» в редакторе, как концепт для набора игровых объектов изолированных от других объектов. Когда вы находитесь в режиме Prefab Mode, навигатор сверху окна сцены показывает разные уровни изменений. Каждый уровень (stage) представляет собой отдельный «мир». По-умолчанию, все имеет главный уровень (Main Stage), который является состоянием всей сцены, которую вы видите. Когда открывается режим работы с префабами, создается новый уровень изменений — «Prefab Stage» для контента префаба. При этом предыдущее изменение не выгружается из памяти и вы можете его наблюдать, не закрывая окно префаба.

Для навигации между состояниями (stages) вы можете использовать панель навигации сверху окна сцены.

Новый процесс работы с префабами в действии

Как это попробовать???

Скачать предварительную сборку можно по этой ссылке

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Данный урок является частью серии уроков «Введение в Unity», состоящей из 2 уроков.

  • Часть 1.
  • Часть 2. (вы здесь!)

В первой части серии Введение в Unity мы изучали входы и выходы интерфейса Unity.

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

По пути вы узнаете:

  • Как использовать окно проекта для импорта и организации ресурсов;
  • Разница между GameObjects и Prefabs;
  • Как работает физика;
  • Как работает камера и типы доступных проекций;
  • Основы материалов.

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

Материала много, так что переведите телефон в режим полета, заприте дверь и откройте свой разум миру Unity.

Начнем

Скачайте и разархивируйте материалы проекта.

Материалы содержат четыре папки:

  • Игровые ресурсы (game assets)
  • Модели (models)
  • Стартовый проект (starter project)
  • Финальный проект (final project)

Вы можете использовать проект, созданный в первой части урока или открыть стартовый проект в Unity, используя путь File ► Open Project и выбрать проект Space Debris Starter.

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

В браузере найдите папку game assets, выберите все файлы в этой папке и перетащите их в папку Assets в окне проекта в Unity.

Примечание: Если вы не видите окно проекта, откройте его через Window ► Layouts / 2 by 3.

Когда закончится импорт файлов, окно проекта будет выглядеть так:

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

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

Организация

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

Наш следующий шаг – разложить ресурсы по папкам. В окне проекта нажмите Create и выберите из списка вариантов Folder.

Назовите новую папку Materials. Теперь окно проекта должно выглядеть так:

Теперь создайте ещё пять папок для ваших ресурсов:

  • Models
  • Prefabs
  • Scripts
  • Sounds
  • Textures

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

Теперь давайте организуем ресурсы.

Выберите скрипты Bullet, Debris, GameManager, IonCannon, RendererFade, ScreenWrap и ShipController и перетащите их в папку Scripts.

Примечание: Вы можете заметить, что GameManager имеет отличную от других иконку. В большинстве игр есть объект с именем GameManager, который действует как общий “мозг” для игры. Это стандарт, принятый многими разработчиками. Он используется так часто, что в Unity для него создали специальную иконку.

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

Затем выберите звуковые файлы background-music, explosion и shoot и перетяните их в папку Sounds.

Наконец, выберите текстуру flint_like_rock_4787 и переместите ее в папку Textures.

Ваше окно проекта должно выглядеть так:

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

Unity сохраняет вашу работу в сценах. Сценой может быть один из множества уровней или один единственный в игре уровень. В этом уроке мы будем использовать только одну сцену.

Нажмите Command-S (Control-S на Windows), чтобы сохранить сцену. Откроется диалоговое окно сохранения. Назовите свою сцену Main.

Создай свой первый экземпляр

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

Файл FBX содержит все данные, необходимые для создания 3D-модели прочего, например, анимации. Файл игрока, который мы будем использовать в этом уроке, был создан ComboMash для его игры Hextraction.

Выберите все файлы в папке player и перетащите их в папку Assets в окне проекта. Откроется следующее диалоговое окно:

Некоторые файлы изображений передают дополнительную информацию для Unity, но сохраняются в стандартном формате изображения. В этом случае p_pod_normal.jpg определяет глубину поверхности, которая предоставляет информацию об освещении поверхности без необходимости создания дополнительной геометрии. Это называется normal map.

Однако Unity считает, что имеет дело с обычным изображением. Нажмите кнопку Fix now, чтобы Unity обработал этот файл как normal map.

По умолчанию Unity импортирует камеры вместе с вашей моделью. Для этой игры вам понадобится только одна камера: основная. Выберите hextraction_pod в окне проекта. В окне Инспектора убедитесь, что выбрана вкладка Model. Снимите галочку Import Cameras.

После этого нажмите кнопку Apply.

При импорте файлов проигрывателя перетащите ресурс hextraction_pod из окна проекта в окно просмотра.

Круто – вы создали свой первый экземпляр модели. Unity правильно импортировал текстуры и применил их к модели.

Вы также заметите, что в Hierarchy появился новый GameObject.

Работа с GameObjects

Как отмечалось в первой части урока, все в иерархии будет типом GameObject. GameObject сам по себе содержит то, что известно как трансформ, который имеет информацию о положении, масштабе и вращении GameObject.

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

Например, вы можете добавить световой компонент для освещения GameObject. Вы можете добавить источник звука, чтобы ваш GameObject издавал звук. Или вы даже можете написать свои собственные компоненты в виде скриптов и прикрепить их к GameObjects.

GameObjects также могут выступать в качестве контейнеров. Удерживая клавишу Alt, нажмите на треугольник раскрытия слева от hextraction_pod в иерархии. Это позволит расширить GameObject и все уровни под ним. Вы увидите следующую коллекцию GameObjects:

Многие из них являются пустыми GameObjects, которые представляют собой структуру модели. Unity создает эти их при импорте модели. Другие GameObjects, такие как дочерние элементы pod_mesh, содержат компоненты, такие как обработанные сетчатые визуализаторы для отображения геометрии на экране.

Вы заметите, что некоторые GameObjects в иерархии помечены черным цветом, а другие – синим.

Черный цвет означает, что это стандартный объект. Синий текст говорит вам, что GameObject является экземпляром модели или что он подключен к другим объектам с помощью префаба(сборного соединения). Иногда GameObjects также становятся коричневыми. Это означает, что они потеряли префаб.

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

Работа с Префабом

Как правило, вы не хотите использовать экземпляры модели. Лучше использовать префабы. Префабы позволяют сохранять GameObjects, поэтому они легко дублируются либо с помощью кода, либо путем перетаскивания новых экземпляров в представленные сцены.

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

Если у вас есть экземпляр префаба во вьюере, вы можете настроить его по своему усмотрению. Могут быть случаи, когда вы хотите переместить эти изменения в существующие префабы (потому что они вам понравились) или сбросить экземпляр в состояние исходного префаба (потому что вы испортили).

Чтобы создать префаб, перетащите GameObject из иерархии в окно проекта.

Когда вы сделаете это, вы получите диалоговое окно, которое спрашивает, хотите ли вы создать новый префаб или вариант префаба.

save-prefab-dialog

Поскольку у нас нет префаба, нажимаем кнопку Original Prefab.

Вы заметите, что ваш значок станет полностью синей. Это означает, что вы работаете с экземпляром префаба.

Выберите hextraction_pod из иерархии. В окне инспектора вы увидите две кнопки: Open и Select. Есть также выпадающий список под названием Overrides:

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

open-prefab-1Выделите местонахождение префаба в окне проекта. Это особенно полезно, когда вы неправильно размещаете свою сборку в сложной структуре папок в окне проекта. Попробуйте сейчас, чтобы увидеть, что происходит.

Когда вы вносите изменения в префаб, вы вносите изменения в один экземпляр префаба. В Unity-speak вы переопределяете части префаба. Вы можете применить эти изменения к другим префабам, отменить изменения или просто оставить их как есть. Это делается путем открытия Overrides.

override

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

Выберите префаб и в окне инспектора нажмите кнопку Open. Затем выберите объект Tile_reference GameObject из Иерархии. Это прямой потомок объекта GameObject hextraction_pod.

Удалите сетку, нажав клавишу Delete в Windows или Command-Delete на macOS. Щелкните стрелку назад в иерархии, чтобы выйти из редактирования префаба.

При выходе из префаб-режима вам будет предложено сохранить изменения. Нажмите кнопку Save.

save-prefab-dialog

Затем щелкните правой кнопкой мыши на hextraction_pod в окне иерархии, выберите Rename из выпадающего меню, которое появляется, и переименуйте GameObject в Spaceship. Это должно выглядеть следующим образом:

spaceship-2

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

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

PrefabDuplicates

Вперед, моя неудержимая армия космических кораблей! Мухахаха!

Контроль камеры

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

Для этого вам нужно будет иметь дело с двумя вещами: камерой и физической системой. Не волнуйтесь, сегодня вам не нужно будет изучать физику субатомных частиц! :]

Во-первых, вам нужно настроить корабль.

  1. Выберите Spaceship в окне иерархия.
  2. Используйте окно инспектора, чтобы установить его положение /Position/ в (X:10.66, Y:1.99, Z: 10).
  3. Установите вращение /Rotation/ на (X:270, Y:0, Z: 0).

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

spaceship-3

Так откуда беруться эти значения? Они на самом деле довольно случайны.

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

Глядя вьюер игры, можно заметить, что корабль все еще находится близковато к камере.

ShipTooClose

Есть два способа исправить это. Вы можете либо переместить корабль дальше назад, либо перенастроить камеру. Приготовьтесь стать оператором! :]

Выберите основную камеру в иерархии. Вы увидите Camera component в инспекторе. Здесь есть тонна вариантов, но пока игнорируйте все, кроме Projection и Field of View.

camera-component

Вы можете выбрать Perspective или Orthographic для вашего поля проекции. Этот выбор определяет окончательный внешний вид игры.

Перспективная (perspective) проекция ведет себя очень похоже на ваш глаз. Чем ближе объект к вашему глазу, тем больше он кажется. Ортогональные (orthographic) проекции отбрасывают информацию о глубине. Объекты, расположенные ближе к вам, или в данном случае камера, будут иметь тот же размер, что и объекты, расположенные дальше.
Два куба слева показаны с перспективной проекцией, в то время как кубики справа являются ортогональными.

2Dvs3D

Вообще говоря, 3D-игры должны использовать перспективную проекцию. Игры без глубины, как и 2D игры, следует использовать ортогональную проекцию.

Если ваша игра имеет 3D элементы, геймплей по сути 2Д. В поле Projection выберите Orthographic. Затем установите размер /size/ в 18.85. Ваш игровой вид должен выглядеть следующим образом:

ShipCameraFixed

Космический корабль должен летать, не так ли? Для этого вам нужно будет написать код на C#, чтобы перемещать корабль кадр за кадром. Чтобы сохранить некоторые работы, примеры файлов содержат готовый к использованию скрипт. Вопрос в том, как вы добавляете его на свой корабль.

Скрипт – это просто другой тип компонента, и существует множество способов добавления компонентов в GameObjects. Вы будете экспериментировать с несколькими методами в этом уроке.

На данный момент, выберите Spaceship из иерархии. Затем в строке меню выберите пункт Component. Внизу вы увидите опцию Scripts с всплывающим меню доступных скриптов. Выберите сценарий Ship Controller.

AddScript

Теперь вы видите, что Ship Controller был добавлен в скрипты в Spaceship GameObject в окне инспектора.

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

ship-controller

Установите Move Speed вашего компонента на 22 и Rotation Speed на 2.

Скорость движения (move speed) определяет скорость корабля, в то время как скорость вращения (rotation speed) определяет, как быстро корабль может повернуть. Нажмите кнопку Play в центральной верхней части интерфейса Unity. Это начинает игру. Используйте клавиши со стрелками для перемещения вашего корабля.

К сожалению, Ваш корабль улетит с экрана, к Альфе Центавра и дальше. Нужно это исправить.

Используйте строку меню, как и раньше, чтобы добавить Screen Wrap (сценарий переноса экрана) на космический корабль.

screenwrap-component

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

Если его нет на экране, то он телепортирует GameObject в другую позицию на экране на основе его направления движения и текущего положения.

Разверните ноду Spaceship, пока не найдете body GameObject, затем перетащите body в поле Renderers.

ScreenWrapSetup

Теперь запустите свою игру. Бесконечность не предел! :]

Infinity

Не забыли сохраниться?

Знакомство с физикой

Есть только одна серьезная проблема. Управляя своим кораблем, вы нарушили один из законов физики. Нет, не законы физики Ньютона — законы законы лучших физических практик Unity.

Unity использует физику для обнаружения столкновений. Если GameObject не имеет компонента RigidBody, он будет статическим коллайдером.

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

Чтобы избежать этой ненужной нагрузки на процессор, вам нужно будет выбрать физический движок, добавив компонент Rigidbody. Вы уже добавили компоненты непосредственно из строки меню. На этот раз, когда Spaceship все еще выбран в иерархии, нажмите кнопку Add Component в инспекторе.

add-component

Появится меню компонентов. Щелкните Physics, затем Rigidbody.

add-rigidbody

Этот компонент имеет множество опций. Нас интересует Is Kinematic.

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

Установите флажок Is Kinematic. Поскольку вы не используете гравитацию в этой игре, снимите флажок Use Gravity. Это должно выглядеть следующим образом:

rigidbody-configuration

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

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

Есть даже сетчатый коллайдер, основанный на 3D-модели. Коллайдеры отображаются во вьюере с помощью зеленых линий.

Collider

Если вы используете дисплей Retina, зеленые линии очень тонкие. Unity имеет возможность настройки или делает редактор dpi чувствительным, чтобы исправить это.

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

Выберите Spaseship в иерархии и нажмите кнопку Add Component в инспекторе. Нажмите Physics / Sphere Collider, и вы увидите зеленый круг позади космического корабля.

ShipCollider1

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

  1. Со Spaseship, выбранным в иерархии, найдите свой сферический коллайдер в инспекторе;
  2. Установите Center в (X:0, Y:4.09, Z:-0.72);
  3. Установите Radius в 3.14;
  4. Установите галочку Is Trigger. Кинематические GameObjects не могут регистрировать обычные столкновения, но они могут замечать пусковые события от других кинематических объектов.

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

sphere-collider

Коллайдер также должен заключать в себе космический корабль, вот так:

ShipCollider2

Вооружение

Конечно, летать вокруг весело и все такое, но у большинства игроков есть навязчивое желание выстрелить несколько десятков фотонных торпед! :]

Существует скрипт, чтобы помочь удовлетворить эту тягу.

Выберите Spaceship в иерархии и нажмите кнопку Add Component в окне инспектора. Нажмите Scripts / Ion Cannon.

Вы заметите, что компонент Audio Source был автоматически добавлен в GameObject вместе со скриптом.

audio-source

Некоторые скрипты требуют компонентов. Если компоненты не найдены в GameObject, они будут добавлены автоматически.

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

Перетащите файл shoot из папки Sounds в окне проекта в поле Fire Sound.

ion-cannon

Вы заметите, что срипт Ion Cannon имеет поле Bullet (пуля). Ваша задача создать пули как объект. Не волнуйтесь, если вы не художник – простой сферы будет достаточно.

Нажмите кнопку «Create» в иерархии. В меню выберите 3D Object, затем выберите Sphere.

AddProjectile

Выберите Sphere в иерархии, затем с помощью инспектора установите масштаб /Scale/ (X:0.47, Y:0.47, Z:0.47). Снова выберите сферу в иерархии и назовите ее Bullet.

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

Примечание: Выберите Bullet из иерархии и нажмите кнопку Add Component в инспекторе. Выберите Physics / Rigidbody, чтобы добавить компонент Rigidbody.

Пуля будет нуждаться в скорости для перемещения,поэтому убедитесь, что Is Kinematic не установлен. Также, убедитесь, что Use Gravity не отмечено.

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

Наконец, перетащите объект Bullet в папку Prefab окна проекта. Это создает префаб пули, которая позволяет создавать множество пуль с помощью скрипта. Пиу, пиу! :]

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

Снова выберите свой Spaceship и используйте инспектор, чтобы добавить префаб пули в поле пули. Инспектор должен выглядеть так:

ConnectBulletCannon

Вам не кажется, что фон неба несколько неуместен? Вы ожидаете, что космический корабль будет летать в черной пустоте космоса, не так ли? :]

Выберите Main Camera в иерархии и используйте инспектор чтобы установить на Clear Flags > Solid Color и на Background Color > black.

CameraSetup

Сохраните свою работу, запустите свою игру и нажмите пробел, чтобы использовать ионную пушку!

ShootingGameplay

Добавим мусор

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

Найдите rock_d_05.obj в загруженных файлах и перетащите его в папку Models в окне проекта.

Щелкните правой кнопкой мыши rock_d_05.obj и переименуйте его в Asteroid.

Rename_Rock

Этот файл содержит только информацию о самой модели. Он не имеет никаких готовых анимаций.

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

Asteroid

Симпатичная парочка? Я дам им неделю! Похоже, это могут быть непростые отношения. :]

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

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

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

Unity достигает этого путем инкапсуляции шейдера с каждым материалом.

Что такое шейдер, спросите вы? Это простая программа, написанная на C-подобном языке, которая работает на GPU. Шейдер может быть достаточно простым для визуализации текстуры на кубе или достаточно сложным для имитации воды.

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

Откройте папку Materials в окне проекта и нажмите кнопку Create. Из выпадающего списка выберите Materials и дайте ему имя Asteroid. В окне инспектора вы увидите доступные свойства материала.

Material_Settings

      1. Опция Shader позволяет выбрать один из многих предварительно упакованных шейдеров. Стандартный шейдер по умолчанию обладает огромной гибкостью настроек, поэтому оставьте его выбранным.
      2. Когда в астероид попадают, вы хотите, чтобы он исчез, поэтому установите Rendering Mode на Fade.
      3. Свойство Albedo содержит фактическую текстуру. Вы можете подкрасить ее цвет. Перетащите изображение flint_like_rock_4787 из папки Textutes в окне проекта в свойство Albedo:AsteroidMaterial
      4. Глядя на предварительный просмотр материала астероида в нижней части окна инспектора, Вы заметите, что материал выглядит слишком гладким, как будто он был отполирован. (Если вы не видите предварительный просмотр материала, попробуйте перетащить строку заголовка астероида вверх из нижней части инспектора следующим образом):

        material-preview-in-inspector

        AsteriodPolished

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

        AsteriodMatt

      6. Установите ползунок Smoothness на 0.149. Теперь ваш материал должен выглядеть так:AddingAsteroidMaterial

Потрясающе! У вас есть астероид, готовый вызвать много неприятностей. Но сначала вам нужно задать ему некоторое поведение.

Перетащите скрипт Debris из окна проекта в папке Scripts на астероид.

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

Asteroid_GameObject_Settings

  1. Установите центр сферы коллайдера /Sphere Collider > Center/ в (X:0.01, Y:-0.09, Z:0.89).
  2. Установите радиус /Radius/ 1,49.
  3. Установите галочку Is Trigger.
  4. Для Rigidbody снимите флажок Use Gravity.
  5. Устаровите галочку Is Kinematic.
  6. Для скрипта Debris установите Min Speed на 15.
  7. Установите Max Speed на 30.
  8. Перетащите звуковой файл взрыва из папки Sounds в поле Explosion Sound.
  9. Для преобразования объекта Asteroid GameObject установите масштаб /Scale/ в (X:3.02, Y:3.02, Z:3.02).
  10. Добавление компонента Debris также добавило необходимый компонент Renderer Fade. Когда пуля сталкивается с астероидом, астероид должен исчезнуть, а не просто исчезнуть с экрана. Для компонента требуется только время затухания, поэтому установите Fade Time на 0,5.

Так как астероиды дрейфуют на экране, их нужно обернуть так же, как космический корабль.

Из папки Scripts в окне проекта перетащите сценарий ScreenWrap на астероид. Так же, как вы сделали с космическим кораблем, вам нужно будет настроить ScreenWrap с правильным рендерером.

У астероида есть дочерний игровой объект rockLP001. Перетащите этот GameObject в свойство Renderers компонента Screen Wrap в окне инспектора на объект астероид.

InfinityAsteroid

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

Последнее, что вам нужно, это точка появления для всех астероидов. Нажмите кнопку Create в иерархии и выберите Create Empty. Назовите свою точку появления Debris.

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

Перетащите Debris GameObject и сделать его дочерним missile_R_0. Затем координаты преобразования Debris будут относиться к его родительскому GameObject.

Чтобы соответствовать координатам родителя, установите положение Debris в (X:0, Y:0, Z: 0). С помощью этой маленькой хитрости вы можете быть уверены, что Spaceship и Debris на одной плоскости.

Затем переместите Debris в нижнюю часть представления иерархии, где он изначально находился.

DebrisSpawnTransform

Переместите Debris GameObject на 7.5 вправо. В случае, если вам не удалось получить, что все точно так же, его новая позиция должна быть (X:20.0, Y:1.72, Z:7.06).

DebrisSpawnShift

Собираем всё вместе

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

Нажмите кнопку Create в иерархии и выберите Create Empty. В инспекторе нажмите на имя нового GameObject и назовите его GameManager.

Выбрав GameManager в иерархии, нажмите кнопку Add Component, выберите Scripts, затем выберите GameManager.

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

Начните с поля Debris. Убедитесь, что GameManager выбран в иерархии, и перетащите сборку астероида в поле Debris.

Что же мы здесь делали? GameManager отвечает за умножение астероидов. Он использует поле Debris, чтобы решить, какие объекты создавать. Вы сказали ему использовать префаб астероида.

Далее, все еще на GameManager:

  1. Установите Min Time на 2 и Max Time на 5. Это говорит скрипту, как быстро он должен создавать астероиды.
  2. Установите Total Items on Screen на 5. Это ограничивает количество астероидов до 5, так что игрок не перегружен.
  3. Перетащите Debris GameObject из иерархии в поле Screen Debris. Это указывает на то, что GameManager должен создавать астероиды для Debris GameObject.

Компонент GameManager должен выглядеть следующим образом:

game-manager-setup-overview

Наконец, в компоненте Audio Source добавьте фоновую музыку (background-music) в поле AudioClip и убедитесь, что установлен флажок loop.

BackgroudSound

Запустите свою игру и проверьте, как все выглядит.

GameView

Поздравляю – вы создали свою самую первую игру в Unity!

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

… и ты вы забыли сохранить свою работу. Верно? 😉

Что дальше?

  • Чтобы узнать больше о Unity, изучите другие наши уроки.
  • Много бесплатного и прекрасного контента на YouTube.
  • Периодически проверяйте наш сайт на обновления, либо подпишитесь на нашу рассылку, чтобы своевременно узнавать о новых уроках.

Если у вас есть вопросы или замечания, то пишите в комментарии!

В этой второй части урока по введению в Unity вы узнаете: «Как использовать окно Project для импортирования и организации игровых ресурсов», «Различия между игровыми объектами и префабами», «Как работает физика в Unity», «Как работают камеры и какие типы проекций доступны» и «Основы материалов в Unity».

Версия: C# 7.2, Unity 2018.3, Unity

Как сделать игру в Unity3D

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

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

Этот урок даст вам общее представление о различных системах Unity, и вы соберите игры из заранее подготовленных ресурсов. В последующих уроках вы узнаете о подсистемах Unity подробнее во время создания свои собственных игровых ресурсов, и напишете свои собственные скрипты. Когда закончите, результат будет выглядеть так:

Игра про астероиды, сделанная на Unity

Здесь есть, что разобрать, поэтому переведите свой телефон в режим полета, закройте двери, и откройте свой разум для мира Unity!

Приступая к работе

Вы можете найти ссылку для скачивания исходников вверху урока.

В них содержится четыре папки:

  • game assets
  • models
  • starter project
  • final project

Вы можете использовать проект, над которым работали в первой части урока, или открыть начальный проект в Unity, используя File -> Open Project, затем выбрать папку проекта Space Debris Starter.

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

Первый способ как открыть проект в Unity
Второй способ как открыть проект в Unity

В файловой системе перейдите в папку game assets из коллекции скаченных файлов примеров, выберите все файлы в этой папке и перетащите их в папку Assets, которая находится в окне Project в Unity.

Перетаскивание файлов в папку Assets в окне проекта Unity

Примечание. Если вы не видите окно Project, выберите Window -> Layots / 2 by 3.

Когда Unity заканчивает импортирование файлов, то окно Project будет выглядеть следующим образом:

Импортирвованные файлы в Окне Project в Unity

Unity по умолчанию использует большие значки файлов, но если вы предпочитаете работать со списками, то можете изменить их так: В нижней части окна Project, переместите ползунок влево, чтобы уменьшить значки файлов игровых ресурсов.

Изменение размера значков файлов в окне Project в Unity

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

Организация файлов

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

Следующий шаг — расположить файлы по папкам. В окне Project нажмите на кнопку Create и выберите Folder из списка опций.

Создание новой папки в окне Project в Unity

Назовите папку Materials. Окно Project теперь должно выглядеть следующим образом:

Новая папка Materials в окне Project

Теперь создайте следующие пять папок для хранения остальных файлов:

  • Models
  • Prefabs
  • Scripts
  • Sounds
  • Textures

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

Теперь пришло время организации файлов!

Выберите скрипты Bullet, Debris, GameManager, IonCannon, RendererFade, ScreenWrap и ShipController и перетащите их в папку Scripts.

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

Уникальный значок для GameManager в Unity

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

Далее, выберите звуковые файлы background-music, explosion и shoot и перетащите их в папку Sounds.

Наконец, выберите текстуру flint_like_rock_4787 и переместите ее в папку Textures.

Окно Project должно выглядеть следующим образом:

Необходимые папки для работы в окне Project в Unity

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

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

Нажмите кнопку Command-S (Ctrl-S в Windows), чтобы сохранить игру. Появится диалог сохранения. Назовите сцену Main.

Диалог сохранения проекта Unity

Создание первого экземпляра в Unity3D

Что за игра без игрока? Загляните в файл models / player из файлов примеров, которые вы скачали ранее. Вы увидите FBX-файл с несколькими файлами изображений.

FBX-файл содержит все данные, необходимые для создания 3D-модели, а также другие вещи, такие как анимация. Файл игрока, который вы будете использовать в этом уроке Unity, был создан разработчиком ComboMash для игры Hextraction.

Выберите все файлы в папке player и перетащите их наверх в паку Assets в окне Project. Вы увидите следующий диалог:

Диалоговое окно для установки изображения в качестве карты нормалей

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

Тем не менее, Unity считает, что имеет дело обычным изображением. Нажмите Fix now, чтобы сообщить Unity, что данный файл следует воспринимать как карту нормалей.

По умолчанию, Unity будет импортировать камеры с моделью. Для этой игры нужна только одна камера: главная камера. Выберите hextraction_pod в окне Project. Убедитесь, что в окне Inspector выбрана вкладка Model. Снимите отметку с Import Cameras.

Параметр ImportCameras для импортирования камеры модели

После этого нажмите на кнопку Apply.

Когда файлы игрока импортированы, перетащите игровой ресурс hextraction_pod из окна Project в окно Scene.

Перетаскивание ассета из окна Project в окне сцены Unity

Круто — вы создали свой первый экземпляр модели. Редактор Unity правильно импортировал текстуры и применил их к модели.

Вы также заметите, что окно Hierarchy содержит новый игровой объект.

Новый игровой объект в окне Hierarchy

Работа с игровыми объектами

Как отмечалось в первой части данного урока, все в Hierarchy будет иметь тип GameObject. Игровой объект сам по себе содержит так называемый компонент transform, который содержит информацию о положении, масштабе и повороте игрового объекта.

Компонент transform игрового объекта в Unity

Настройка игровых объектов происходит добавлением к ним компонентов. Вы можете думать о компонентах как о представлении поведения и внешнего вида игрового объекта.

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

Игровые объекты также могут взаимодействовать как контейнеры. Зажмите кнопку Alt и нажмите кнопкой мыши на раскрывающийся треугольник слева от hextraction_pod в окне Hierarchy, чтобы раскрыть игровой объект и все уровни ниже него. Вы увидите следующую коллекцию игровых объектов:

Игровые объекты могут содержать другие в окне Hierarchy в Unity

Многие из них — это пустые игровые объекты, которые представляют структуру модели. Unity создает эти игровые объекты, когда вы импортируете модель. Другие игровые объекты, такие как потомки pod_mesh, содержат такие компоненты, как Skinned Mesh Renderers для отображения геометрии на экране.

Вы заметите, что некоторые игровые объекты в окне Hierarchy помечены черным, в то время как другие — синим.

Разное отображение игровых объектов в окне Hierarchy в Unity

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

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

Значок экземпляра модели в Unity

Работа с префабами

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

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

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

Чтобы создать префаб перетащите игровой объект из окна Hierarchy на окно Project.

Перетаскивание игрового объекта из окна Hierarchy на окно Project для создания префаба в Unity

Когда вы сделаете это, то появится диалог, который спросит хотите ли вы создать новый префаб или вариант префаба.

Диалоговое окно для создания префаба в Unity

Поскольку у вас нет готового префаба, нажмите на кнопку Original Prefab.

Вы заметите, что значок стал полностью синим. Это означает, что вы работаете с экземпляром префаба.

Выберите hextraction_pod в окне Hierarchy. В окне Inspector вы увидите две кнопки: Open и Select. Также выпадающее меню, которое называется Overrides:

Кнопки Open, Select и Overrides в окне Inspector в Unity

Кнопка Open позволяет открыть префаб и редактировать его, что позволяет сосредоточиться только на префабе. Окно Hierarchy будет показывать только выбранный префаб. Чтобы вернуться к обычному редактированию нажмите стрелку назад в окне Hierarchy.

Редактирование префаба в Unity3D

Кнопка Select находит местоположение префаба в окне Project. Это особенно полезно, когда вы поместили префаб в сложную структуру папок в окне Project. Попробуйте сделать это сейчас, чтобы посмотреть, что происходит при нажатии этой кнопки.

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

Применить или перезаписать изменения, которые сделаны в префабе

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

Выберите префаб и в окне Inspector нажмите кнопку Open. Затем выберите игровой объект tile_reference в окне Hierarchy. Это прямой потомок игрового объекта hextraction_pod.

Удалите сетку, нажав на клавишу Delete в Windows или Cmd-Delete в macOS. Нажмите стрелку назад в окне Hierarchy, чтобы выйти из редактирования префаба.

Вам будет предложено сохранить изменения при выходе из режима префаба. Нажмите Save.

Диалоговое сохранения изменений для префаба в Unity

Далее, нажмите на hextraction_pod в окне Hierarchy, выберите Rename из выпадающего меню, которое появится, и переименуйте игровой объект на Spaceship. Это должно выглядеть следующим образом:

Переименование игрового объекта в окне Hierarchy в Unity

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

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

Создание экземпляров, перетаскиванием игрового объекта из окна Project на сцену в Unity

Вперед, моя неудержимая армия космических кораблей! Ха-ха-ха!

Управление камерой

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

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

Для начала вам нужно настроить корабль.

  1. Выберите космический корабль в окне Hierarchy.
  2. Используйте окно Inspector для установки позиции на (X:10.65,Y:1.97,Z:10).
  3. Установите Rotation на (X:270,Y:0,Z:0).

Значения в окне Inspector будут соответствовать с указанными ниже.

Настройка параметров Position и Rotation свойства transofrm игрового объекта Spaceship

Итак, как я пришел к таким значениям? Они на самом деле случайные.

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

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

Расположение космического корабля в окне Game в Unity

Есть два способа это поправить. Вы можете передвинуть корабль дальше назад или перенастроить камеру. Приготовьтесь стать помощником оператора!

Выберите Main Camera в окне Hierarchy. Вы увидите компонент Camera в окне Inspector. Здесь есть множество опций, но пока что проигнорируйте все, кроме Projection и Field of View.

Настройки Main Camera в окне Inspector в Unity

Вы можете выбрать Perspective или Orthographic для поля проекции. Этот выбор определяет окончательный внешний вид игры.

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

Перспективная и ортографическая проекции в Unity

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

В основном, 3D-игры должны использовать перспективную проекцию. Игры без глубины, как 2D-игры, должны использовать ортогональную проекцию.

В то время как ваша игра имеет 3D-элементы, игровой процесс по сути 2D. В поле Projection выберите Orthographic. Далее установите параметр size на 18.85. Окно Game должно будет выглядеть следующим образом:

Космический корабль в окне Game после установки проекции Orthographic в Unity

Космический корабль должен летать, не так ли? Чтобы сделать это, вам нужно написать некоторый код на C# , чтобы перемещать корабль кадр за кадром. Чтобы сэкономить время в работе, файлы примеров содержат готовый к использованию скрипт. Вопрос в том, как добавить его на корабль?

Скрипт просто еще один тип компонента, и есть множество способов добавления компонентов к игровым объектам. В этом уроке вы поэкспериментируете с несколькими методами.

А пока что выберите Spaceship в окне Hierarchy. Затем выберите опцию Component в строке меню. Внизу вы увидите опцию Scripts с всплывающим меню доступных скриптов. Выберите скрипт Ship Controller.

Добавление игровому объекту Spaceship компонента скрипта Ship Controller в Unity

Теперь вы должны увидеть, что скрипт Ship Controller был добавлен в качестве компонента Script к игровому объекту Spaceship в окне Inspector.

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

Настройки параметров Move Speed и Rotation Speed в компоненте Ship Controller в Unity

Установите Move Speed компонента на 22 и Rotation Speed на 2.

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

К сожалению, корабль улетит с экрана, в Альфа Центавра и дальше. Вам нужно это исправить.

Используйте строку меню, как раньше, чтобы добавить скрипт Screen Wrap на космический корабль.

Настройка параметра Renderers в компоненте Screen Wrap в Unity

Вы заметите, что у этого компонента есть поле с именем Renderers, которое принимает массив Skinned Mesh Renderers. Это геометрия, которая создает модель.

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

Раскройте вкладку Spaceship, пока не найдете игровой объект body, затем перетащите этот объект в поле Renderers.

Перетаскивание объекта body из игрового объекта Spaceship в поле Renderers

Теперь запустите игру. К бесконечности… и дальше!

Воспроизведение игры в окне Game в Unity

Вы не забыли сохранить свою работу?

Введение в физику

Есть только одна большая проблема. Управляя кораблем, вы нарушили один из законов физики. Нет, не закон Ньютона — законы физики Unity лучшей практики.

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

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

Чтобы избежать ненужной нагрузки на процессор, вам нужно отключить физический движок, добавив компонент Rigidbody. Вы уже добавили компоненты напрямую из строки меню. На этот раз, с выделенным игровым объектом Spaceship в окне Hierarchy нажмите на кнопку Add Component в окне Inspector.

Кнопка добавления нового компонента к игровому объекту в окне Inspector в Unity

Вы увидите, что появилось меню компонентов. Нажмите Physics, затем Rigidbody.

Добавление компонента Rigidbody для игрового объекта Spaceship в окне Inspector в Unity

У этого компонента много опций. Is Kinematic — то, что вас интересует.

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

Установите флажок на параметре Is Kinematic. Поскольку вы не используете гравитацию в этой игре, снимите флажок с параметра Use Gravity следующим образом:

Настройка параметров Is Kinematic и Use Gravity в компоненте Rigidbody в Unity

Цель игры — летать вокруг и стрелять в различные типы мусора. Естественно, обработка столкновений будет играть большую роль в этом типе игры. Вам нужно знать, когда игрок стреляет в астероид или когда игрок врезается во что-то.

Коллайдеры позволяют прослушивать и реагировать на столкновения. Есть много типов коллайдеров для использования с основными формами, такие как Sphere Collider и Box Collider.

Есть даже mesh-коллайдер, который основан на 3D-модели. Коллайдеры отображаются с использованием зеленых линий на сцене.

Отображение коллайдера в Unity

Если вы используете сетчатый дисплей, то зеленые линии будут очень тонкими. Unity ищет настройку или делает редактор dpi чувствительным, чтобы это улучшить.

В данном уроке вы будете все упрощать и использовать Sphere Collider.

Выберите Spaceship в окне Hierarchy и нажмите кнопку Add Component в окне Inspector. Нажмите Physics / Sphere Collider, и вы увидите зеленый круг за космическим кораблем.

Зеленый круг - коллайдер игрового объекта Spaceship

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

  1. С выбранным Spaceship в окне Hierarchy найдите Sphere Collider в окне Inspector.
  2. Установите Center на (X:0, Y:4.09, Z:-0.72)
  3. Установите Radius на 3.14
  4. Установите флажок Is Trigger. Кинематические игровые объекты не могут регистрировать обычные столкновения, но они могут прослушивать события запуска от других кинематических объектов.

Компонент Sphere Collider должен выглядеть следующим образом:

Настройка компонента Sphere Collider в Unity
Коллайдер также включен в игровой объект Spaceship, вот так:
Компонент коллайдер игрового объекта Spaceship

Вооружение пушек

В то время, как летать вокруг — весело и все, у большинства игроков есть непреодолимое желание запустить несколько десятков фотонных торпед!

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

Выберите Spaceship в окне Hierarchy и нажмите на кнопку Add Component в окне Inspector. Нажмите Scripts / Ion Cannon.

Вы заметите, что компонент Audio Source был автоматически добавлен к игровому объекту так же как и скрипт.

Компонент Audio Source добавлен к игровому объекту в Unity

Некоторым скриптам необходимы компоненты. Если компоненты не найдены в игровом объекте, то они будут добавлены автоматически.

Чтобы объекты воспроизводили звуки, вам нужны Audio Source и Audio Clip. Audio Source может быть прикреплен к любому игровому объекту, в то время как Audio Clip — просто аудио-файл.

Перетащите звук shoot из папки Sounds в окно Project в поле Fire Sound.

Поле Fire Sound компонента Ion Cannon для игрового объекта Spaceship в окне Inspector в Unity

Вы заметите, что скрипт Ion Cannon имеет поле Bullet. Ваша работа — создать объект bullet. Не беспокойтесь, если вы не художник, то достаточно простой сферы.

Нажмите кнопку Create в окне Hierarchy. Из меню выберите 3D Object, затем выберите Sphere.

Создание игрового объекта Sphere в окне Hierarchy в Unity

Выберите Sphere в окне Hierarchy, затем используйте окно Inspector, чтобы установить Scale на (X:0.47, Y:0.47, Z:0.47).
Выберите объект Sphere в окне Hierarchy еще раз и назовите его Bullet.

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

Выберите Bullet в окне Hierarchy и нажмите кнопку Add Component в окне Inspector. Выберите Physics / Rigidbody, чтобы добавить компонент Rigidbody.

Объекту bullet нужна будет скорость для перемещения, поэтому убедитесь, что параметр Is Kinematic не отмечен. Также убедитесь, что параметр Use Gravity не отмечен.

Объект bullet будет продолжать путешествовать даже после того, как вылетит за пределы экрана, как это делал в начале космический корабль. Перетащите скрипт Bullet из окна Project на игровой объект Bullet. Теперь, когда объект bullet будет залетать за экран, то он автоматически будет уничтожаться.

Наконец, перетащите объект Bullet в папку Prefab в окне Project. Это создаст префаб объекта bullet, который позволяет создавать множество объектов bullet используя скрипт.

Теперь, когда есть объект bullet, созданный как префаб, удалите экземпляр этого объекта из окна Hierarchy.

Выберите космический корабль снова и используйте окно Inspector, чтобы добавить префаб Bullet в поле Bullet. Окно Inspector должно выглядеть так:

Добавление префаба в поле Bullet компонента Ion Cannon для игрового объекта Spaceship в Unity

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

Выберите Main Camera в окне Hierarchy и используйте окно Inspector, чтобы установить параметр Clear Flags на значение Solid Color и параметр Background Color на темный цвет.

Настройка цвета фона для игры в компоненте Main Camera в Unity

Сохраните свою работу, запустите игру и нажмите клавишу пробел, чтобы пострелять из ионной пушки!

Воспроизведение игры с летающим космическим кораблем в Unity

Размещение обломков в космическом мусоре

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

Найдите файл rock_d_05.obj в скаченных файлах и перетащите его в папку Models в окне Project.

Нажмите правой кнопкой мыши на rock_d_05.obj и переименуйте его в Asteroid.

Переименовывание файла в окне Project в Unity

Этот файл содержит только информацию о самой модели. Там нет анимации.

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

Модель астероида на игровой сцене в Unity

Милая парочка? Я дам им неделю! Похоже, это могут быть непростые отношения.

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

Разверните игровой объект Asteroid и выберите его дочерний объект с именем rockLP001. В окне Inspector вы увидите, что к этому дочернему игровому объекту прикреплен компонент Mesh Renderer. Рендерер прорисовывает объект на экране, но ему нужно небольшая помощь, чтобы это сделать — вот где в игру вступают материалы.

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

Unity достигает этого инкапсулируя шейдер с каждым материалом.

Что еще за шейдер, спросите вы? Это простая программа, написанная на C-подобном языке программирования, которая работает на GPU. Шейдер может быть достаточно простым для рендеринга текстуры на кубе, или может быть достаточно сложным для имитации воды.

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

Откройте папку Materials в окне Project и нажмите на кнопку Create. Из раскрывающегося списка выберите Material и дайте ему имя Asteroid. В окне Inspector вы теперь увидите доступные свойства для материала.

Свойства материала для игрового объекта Asteroid в окне Inspector в Unity

  1. Опция Shader позволяет выбрать один из множества готовых шейдеров. По умолчанию Standard Shader обладает огромной гибкостью, поэтому оставьте его выбранным.
  2. Когда астероид ударяется, то нужно чтобы он исчезал, поэтому установите параметр Rendering Mode на значение Fade.
  3. Свойство Albedo содержит фактическую текстуру. Вы можете покрасить ее в доступный цвет.
    Перетащите изображение flint_like_rock_4787 из папки Textures в окне Project на свойство Albedo:
    Перетаскивание изображения текстуры на свойство Albedo игрового объекта Asteroid в окне Inspector в Unity
  4. Посмотрев на превью материала Asteroid в окне Inspector, вы заметите, что материал выглядит слишком гладким, как будто был отполирован (если вы не видите превью материала, попробуйте перетащить строку названия Asteroid вверх снизу окна Inspector следующим образом):
    Растягивание окна превью материала игрового объекта Asteroid в окне Inspector в Unity
    Превью материала игрового объекта Asteroid в окне Inspector в Unity
    Под свойством Metallic вы увидите два ползунка. Первый ползунок определяет металлический внешний вид материала, а другой определяет, насколько текстура шероховатая.

    Теперь установите слайдер Metallic на 0.219

  5. Установите слайдер Smoothness на 0.149. Материал должен выглядеть вот так:
    Отображение материала игрового объекта Asteroid после установки параметра Smoothness в окне Inspector в Unity

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

Добавление материала игровому объекту Asteroid на сцену в Unity

Потрясающие! У вас есть астероид, готовый доставить массу неприятностей. Но сначала вам нужно добавить немного поведения к нему.

Перетащите скрипт Debris из окна Project, который находится в папке Scripts, на астероид.

Скрипт Debris автоматически добавил Sphere Collider, Rigidbody и Audio Source к астероиду. Теперь настройте все необходимые свойства.

Настройка свойств игрового объекта Debris в окне Inspector в Unity

  1. Установите параметр center для Sphere Collider на (X:0.01, Y:-0.09, Z:0.89).
  2. Установите Radius на 1.49.
  3. Отметьте параметр Is Trigger.
  4. Для Rigidbody, уберите флажок с параметра Use Gravity.
  5. Отметьте параметр Is Kinematic.
  6. Для скрипта Debris, установите параметр Min Speed на 15.
  7. Установите параметр Max Speed на 30.
  8. Перетащите звуковой файл explosion из папки Sounds на поле Explosion Sound.
  9. Для свойства transform игрового объекта Asteroid, установите параметр Scale на (X:3.02, Y:3.02, Z:3.02).
  10. При добавлении компонента Debris также добавился необходимый компонент Renderer Fade. Когда объект bullet сталкивается с астероидом, то астероид должен раствориться, а не просто исчезнуть с экрана. Компонент требует время выцветания, поэтому установите параметр Fade Time на 0.5.

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

Из папки Scripts в окне Project перетащите скрипт ScreenWrap на Asteroid. Так же как делали это с Spaceship, вам нужно будет настроить Screen Wrap с правильным рендерером.

У Asteroid есть потомок игровой объект с именем rockLP001. Перетащите этот дочерний объект на свойство Renderers компонента Screen Wrap в окне Inspector для игрового объекта Asteroid.

Установка свойства Renderers компонента Screen Wrap игрового объекта Asteroid в окне Inspector в Unity

Наконец, перетащите Asteroid из окна Hierarchy в папку Prefab в окне Project. Нажмите на Original Prefab, когда будет предложено создать префаб. Теперь, когда вы закончили создание префаба Asteroid, удалите экземпляр Asteroid из окна Hierarchy.

Последнее, что нужно сделать — это точка появления для всех астероидов. Нажмите на кнопку Create в окне Hierarchy и выберите Create Empty. Назовите точку появления Debris.

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

Перетащите игровой объект Debris и сделайте его дочерним для missile_R_0. Координаты преобразования Debris тогда будут относительны его родительского игрового объекта.

Чтобы координаты согласовывались с родительским объектом, установите позицию Debris на (X:0, Y:0, Z:0). С этой маленькой хитростью вы можете быть уверены, что Spaceship и Debris находсятся на одной плоскости.

Далее переместите объект Debris вниз окна Hierarchy, где он первоначально находился.

Настройка координат игрового объекта Debris в окне Inspector в Unity

Переместите игровой объект Debris на 7.5 пунктов вправо. В случае, если вам не удалось проделать все это точно также, то его новая позиция должна быть (X:20.0, Y:1.72, Z:7.06).

Перемещение игрового объекта Debris на сцене в Unity

Собираем все вместе

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

Нажмите на кнопку Create в окне Hierarchy и выберите Create Empty. В окне Inspector нажмите на имя нового игрового объекта и назовите его GameManager.

Выбрав GameManager в окне Hierarchy, нажмите на кнопку Add Component, выберите Scripts, затем выберите GameManager.

Вы увидите, что это действие также добавило Audio Source. Кроме того, компонент GameManager имеет несколько полей, которые нужно установить так, чтобы использовать для создания астероидов.

Начните с поля Debris. Убедитесь, что GameManager выбран в окне Hierarchy, и перетащите префаб Asteroid в поле Debris.

Так что вы здесь делали? GameManager отвечает за порождение астероидов и использует поле Debris, чтобы решить какие объекты создавать. Вы указали, чтобы он использовал префаб Asteroid.

Далее, все еще на GameManager:

  1. Установите параметр Min Time на 2 и параметр Max Time на 5. Это указывает скрипту, как быстро следует создавать астероиды.
  2. Установите Total Items on Screen на 5. Это ограничивает число астероидов до 5, так чтобы игрок не был перегружен.
  3. Перетащите игровой объект Debris из окна Hierarchy на поле Screen Debris. Это определяет, что GameManager должен создавать астероиды на игровом объекте Debris.

Компонент GameManager должен выглядеть слудеющим образом:

Настройка компонента GameManager в Unity

Наконец, в компоненте Audio Source добавьте background-music в поле AudioClip, и убедитесь, что у параметра loop стоит флажок.

Добавление звукового файла в поле AudioClip компонента Audio Source

Запустите игру и проверьте, как все выглядит.

Готовая игра про астероиды на Unity

Поздравляем — вы создали свою первую игру в Unity!

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

… и вы не забыли сохранить свою работу. Правильно?

Куда двигаться дальше?

Если хотите, то можете скачать и открыть проект по ссылке вверху данного урока.

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

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

Автор перевода: Jean Winters

Источник: Introduction to Unity: Getting Started – Part 2

Смотрите также:

Как сделать интерфейс в Юнити для игрыВведение в создание пользовательского интерфейса на Unity

Введение в шейдеры UnityUnity: Введение в шейдеры

Понравилась статья? Поделить с друзьями:
  • Unity как изменить ось вращения
  • Unity как изменить направление гравитации
  • Unity как изменить skybox
  • Unitale error sans
  • Unit warning chk then reset магнитола jvc выдает ошибку