Введение в Unity: приступая к работе — часть 2

В этой второй части урока по введению в 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

Комментировать

Почта не публикуется.Обязательные поля отмечены *