Уроки Unity 3d

Введение в Unity: начало работы — часть 2/2

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

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

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

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

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

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

GameView

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

Начнем

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

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

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

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

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

OpenProject1

OpenProject2

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

Assets

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

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

ImportedAssets

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

AssetsResize

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

Организация

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

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

CreateFolder

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

new-folder

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

  • Models
  • Prefabs
  • Scripts
  • Sounds
  • Textures

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

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

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

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

icon

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

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

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

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

project-window-2

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

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

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

Save

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

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

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

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

NormalMap

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

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

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

model

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

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

adding-gameobject

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

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

hierarchy-hex

Работа с GameObjects

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

transform

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

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

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

expanded-hierarchy

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

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

hierarchy-demo

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

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

model-icon

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

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

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

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

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

create-prefab

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

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.
  • Периодически проверяйте наш сайт на обновления, либо подпишитесь на нашу рассылку, чтобы своевременно узнавать о новых уроках.

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

Перевод
raywenderlich.com
Показать больше

5 Comments

  1. Где то я протупил ,а где понять не могу. После создания шарика-пули и запуска игры для проверки, получается что корабль летает но стоит нажать пробел для выстрела, то пуля вылетает и корабль исчезает и спустя какое то время возвращается в исходную точку, как начало игры. Сделал еще раз ,то же самое! Где я накасячил?

  2. В общем то затык произошел с Sphere Collider, в материале написано :»…Коллайдер также должен заключать в себе космический корабль, вот так:…» и рисунок на котором весь корабль заключен в сферу, а при тех параметрах что написаны :»…Установите Center в (X:0, Y:4.09, Z:-0.72); Установите Radius в 3.14; …» Сфера не полностью обволакивает корабль. И я решил что надо слегка увеличить радиус, так сказать доведя до состояния как на рисунке.
    Когда корабль стал исчезать при выстреле и вставать с исходную точку , то я подумал что он ведет себя как при потере жизни в игре ,а когда это случается то юнит всегда встает в начало. И я решил что, раз убивать мой корабль нечему, т.к. астероид еще не создан, то это делает ракета которая ударяется в Sphere Collider изнутри и значит коллайдер должен обтекать корабль, но не должен прикрывать орудия на корабле. Слегка подправив данные все прекрасно заработало!

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

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

Закрыть
Закрыть