В конце 2015 года Unity Technologies неожиданно сбросили бомбу на аудиторию так или иначе связанную с миром игр. Мало того, что они выпустили новую версию Unity, так еще и все возможности профессиональной версии теперь доступны бесплатно!
В этом уроке вы узнаете о новых возможностях Unity 5, в частности:
- Изменения в доступе к компонентам
- Физические эффекторы
- Добавление постоянного значения силы
- Аудио миксер
Вы узнаете об этих функциях когда закончите создавать вместе с нами игру. Она будет не о спасении мира, а наоборот).
Этот урок предполагает, что вы знакомы с основами создания 2D игр в Unity и лишь хотите изучить последние изменения. Если же вы новичок в Unity 2D, изучите наши уроки 2D игра на Unity. Подробное руководство, или Игра в стиле Jetpack Joyride в Unity 2D.
Приступаем к работе
Первое, с чего вам стоит начать - это скачать файлы для начала работы. Разархивируйте и откройте StarterProject\Assets\Scenes\Main.unity в Unity. Вы должны увидеть примерно следующее:
Сцена настроена для трагического и полного уничтожения; камера уже создана и фон ввиде звездной ночи на месте. На переднем плане здания в первозданном виде, они состоят из нескольких спрайтов, взятых на просторах интернета. Каждое здание состоит из отдельных спрайтов, размещенных на слое Сортировки по имени City. В зданиях три системы частиц для дыма, который возникает при уроне от бомб. Но что же может нанести ущерб вашему городу? Конечно же агрессивная атака из космоса!
Суть нашей игры состоит в том, чтобы летать на космическом корабле над домами и бомбить их. Через какое-то время здание начнет дымиться. Чем дольше вы будете продолжать авианалет, тем сильнее будет дымить здание, пока не рухнет.
Звучит просто, не так ли? Тогда давайте усложним задачу и сделаем так, чтобы население города могла защищается с помощью ракет. Для победы ваш корабль должен увернуться от всех ракет и уничтожить все до последнего здания. А когда от города останется только груда щебня, вы можете приземлиться на руины мэрии и объявить, что вы пришли с миром.
Все системы частиц и большинство из необходимых скриптов были написаны для вас. Ваша задача заключается в том, чтобы доделать игру используя некоторые из последних возможностей Unity 5.
Используйте силу!
Запустите игру и вы увидите, что ничего особенного не происходит. Инопланетный корабль просто висит низко над горизонтом и ничего не делает. Пришло время его оживить.
Для начала, выберите Spaceship (Космический корабль) в Иерархии и добавьте к нему компонент New Script. Это будет скрипт на C Sharp, а назовем мы его ShipController.
Вы ведь помните, как добавить новый скрипт? Вот один из способов:
- Нажмите на кнопку Add Component в Инспекторе.
- В появившемся диалоговом окне, начните набирать в текстовом поле New Script. Вы должны увидеть нужный нам компонент в результатах поиска.
- Нажмите на New Script чтобы добавить его.
- Назовите скрипт ShipController.
- Убедитесь, что значение Language -
C Sharp
.
- Нажмите на Create and Add (Создать и добавить).
Дважды кликните на ShipController.cs чтобы открыть его в MonoDevelop. Внутри открывающей фигурной скобки класса добавьте две переменные:
private Rigidbody2D shipRigidbody;
private float force = 150.0f;
shipRigidBody
имеет ссылку на компонент Rigidbody 2D, переменная force
содержит величину силы, которую вы будете прикладывать для перемещения корабля.
Вы могли бы задаться вопросом, зачем нам нужна переменная для хранения компонента Rigidbody 2D, ведь в предыдущих версиях Unity, все, что вам требовалось для доступа к компоненту - это использовать переменную аксессор, rigidbody2D
. Если бы rigidbody было прикреплено к объекту, в нем бы что-то было. Если объекта бы не было, его значение было бы нулевым. Это первое большое изменение в Unity 5.
В двух словах, разработчики Unity чувствовали, что аксессоры слишком противоречивая штука: в одних компонентах есть, а в других нет, причем логики в этом никакой не было.
Более важно то, что в этих аксессорах созданы зависимости через разные подсистемы, поэтому чтобы развитие было гибким, Unity убрали все аксессоры, кроме преобразовательных. Это означает, что вы должны теперь создавать переменные для всех ваших компонентов, за исключением преобразований.
К сожалению, Unity, похоже, использует старые названия, поэтому, если вы решили назвать ваши переменные после аксессоров, вы получите предупреждение, что ваша локальная переменная скрывает в себе старую.
Теперь добавьте следующий код в Start()
:
shipRigidbody = GetComponent<Rigidbody2D>();
В Update()
вам нужно добавить следующее:
if (Input.GetKeyDown(KeyCode.RightArrow)) {
shipRigidbody.AddForce(new Vector2(force, 0));
}
if (Input.GetKeyDown(KeyCode.LeftArrow)) {
shipRigidbody.AddForce(new Vector2(-force, 0));
}
if (Input.GetKeyDown(KeyCode.UpArrow)) {
shipRigidbody.AddForce(new Vector2(0, force));
}
if (Input.GetKeyDown(KeyCode.DownArrow)) {
shipRigidbody.AddForce(new Vector2(0, -force));
}
Это дает вашему кораблю достаточно примитивное управление с помощью клавиш.
Во время управления кораблем, приложение усилий к нажатию каждой кнопки поможет добиться нужного результата. В игре же вам понадобится сделать более трудный механизм контроля, такой как обеспечение равной силы во время зажатой кнопки. Скоро вы прочитаете о постоянной величине силы, но в этом уроке мы расскажем все простым языком.
Запустите сцену. Ваш корабль отлично летает, но иногда заходит за края экрана, словно говоря: "Прощай, детка, прощай". Настало время, чтобы добавить невидимые стены.
Невидимые стены в Unity
Невидимые стены необходимы чтобы игрок не покидал игровое поле и, в то же время, они также могут влиять на игровой процесс. Это приводит к ряду вопросов относительно их поведения:
- Должны ли стены останавливать все движения?
- Должны ли они быть мягкой и отталкивать игрока обратно в игру?
- Если игрок вылетает за пределы игрового поля слева, будет ли он появляться справа?
В этом уроке вы будете применять второй вариант, т.к. у него есть побочный эффект повышения сложности задачи.
До Unity 5 вам требовалось основательно попотеть над этой задачей, теперь, вес что вам нужно сделать, - это добавить новый компонент, называемый effector.
Нажмите правой кнопкой мыши в Иерархии и выберите из выпадающего списка Create Empty. Сделайте так еще два раза, чтобы у вас было три пустых Игровых объекта.
Назначение этих стен - отбрасывать игрока обратно в игровое поле. Вы создадите три из них. Один для верха и два будут по бокам экрана. Это не даст игроку покинуть игровую зону. Вы можете положить еще одну стену на нижнюю часть экрана, хотя это и не обязательно, ведь его остановят здания. Проблема будет иметь место когда игрок уничтожит все здания. В этом случае он сможет летать сквозь землю. Чтобы исправить это, вы можете добавить box-коллайдер, который может взорвать игрока. Не стесняйтесь добавить его как только закончите урок.
Выберите первый пустой Игровой объект созданный вами. Кликните мышкой на его имя в Иерархии и переименуйте в Top Barrier. В Инспекторе сделайте его свойство Position такой: X: 2.3, Y: 8.21, Z: 0. Для его масштаба Scale назначьте следующие значения: X: 48.27, Y: 2.33, Z: 2.33.
Эти базовые единицы, используемые в Unity. В 3D-пространстве одна такая единица в Unity соответствует одиному метру в реальности. С Unity 2D вы можете сопоставлять единицы пикселям.
В этом случае вы настраиваете положение и масштаб области, которая будет отбрасывать пользователя обратно.
В 2D-играх Unity игнорирует масштаб по оси Z и все коллайдеры имеют бесконечную Z-глубину, так что не важно, какое значение Z вы установили здесь.
Далее, в выпадающем списке Tag выберите Add Tag.
Диалог Tags and Layers (Теги и слои) должен открываться с развернутой секцией «Теги». Нажмите на plus, а затем добавьте имя: Barrier. Это очень важно и вы увидите это позднее в учебнике, когда будете работать со столкновениями.
После того, как вы добавили новый тег, выберите Top Barrier в Иерархии и из выпадающего списка Tag выберите Barrier. Вот что у вас должно получиться:
В Иерархии выберите второй пустой Игровой объект, который вы создали, вероятно, названный как GameObject 1. Измените это имя на Left Barrier. В Инспекторе установите его Position в X: -14.68, Y: 1.23, Z: 0, а Scale в X: 2.33, Y: 30.17, Z: 2.33. В выпадающем списке Tag выберите Barrier.
В Иерархии выберите третий пустой Игровой объект, который вы создали, вероятно, названный как GameObject 2 и переименуйте его на Right Barrier. В Инспекторе установите его Position в X: 15.6 Y: 1.23, Z: 0, а его Scale в X: 2.33, Y: 30.17, Z: 2.33. выпадающем списке Tag выберите Barrier.
Мои поздравления! Вы только что возвели барьеры на пути НЛО. Чтобы оттолкнуть игрока обратно вы будете использовать такую штуку, как effector (эффектор).
Спецэффекты с помощью эффекторов
В Unity 5 эффекторы – это способ придавать значение силы Спрайтам. Для вас доступно четыре вида эффекторов.
- Surface Effector: Придает силу по всей поверхности коллайдера, позволяя вам создавать, к примеру, движущиеся поверхности.
- Point Effector: Описывает точку, которая может притягивать или отталкивать с помощью силы.
- Area Effector: Придает направленную силу в определенной области.
- Platform Effector: Помогает вам создать платформы как в платформенных играх, дополнять опциями односторонних столкновений, и настройками контроля трения и отталкивания краев платформы.
Разработчики Unity предоставили изображение, наглядно показывающее все, что вы можете сделать с эффекторами:
Для ваших барьеров, вы будете использовать area effector, так что, когда корабль влетит в эффектора, его вытолкнут обратно.
Для того, чтобы эффектор заработал, соответствующий игровой объект должен иметь приаттаченный к нему коллайдер. Коллайдер должен быть trigger, а напротив Used By Effector должна стоять галочка. Если эти условия не будут выполнены, эффектор не будет работать, но по крайней мере, Unity вам знать об этом:
Чтобы сделать это, выберитеTop Barrier в Иерархии и сперва добавить к нему компонент Box Collider 2D. В Инспекторе у компонента Box Collider 2D поставьте галочки напротив пунктов Is Trigger и Used By Effector. Далее, добавьте к нему Area Effector 2D. Ваш верхний барьер должен настроен так:
Вы, наверное, заметили, что Area effector 2D имеет целую кучу различных опций. Уверен, что вы хотели бы узнать о них хоть что-нибудь. Чтож, давайте с ними познакомимся:
Теперь вернемся к нашей игре. Для выбранного Top Barrier
установите его Force Direction (Направление Силы) равным 270. Это означает, что сила будет толкать объект вниз. Далее, установите Force Magnitude (Величина Силы) на 45, тогда корабль будет выталкиваться вниз, но не сильно, что игрок не потерял управление. Запустите сцену и взлетайте. Вы обнаружите, что вас мягко отбросило вниз, когда вы ударились о потолок. Теперь то же самое проделаем для Left Barrier
и Right Barrier
:
Выберите Left Barrier
и добавьте к нему компоненты Box Collider 2D и Area Effector 2D. Для Box Collider 2D поставьте галочки напротив Is Trigger и Used By Effector. В компоненте Area Effector 2D установите Force Direction равной нулю, а Force Magnitude - 45.
Далее выберите Right Barrier
и добавьте к нему компоненты Box Collider 2D и Area Effector 2D. Для Box Collider 2D также поставьте галочки напротив Is Trigger и Used By Effector. В компоненте Area Effector 2D установите значение Force Direction равным 180, а Force Magnitude - 45.
Теперь запустите сцену и попробуйте покинуть нашу галактику), а потом продолжем создание 2D игры на Unity 5.
Занимаемся обороной города
Давайте смотреть правде в глаза... если у вашему городу угрожает инопланетная цивилизация, вы должны ее уничтожить, угостив балистическими ракетами. Я уже создал такую ракету с системой частиц за вас, осталось заставить ее летать. Расмотрим как это можно сделать в Unity 5.
Перетащите из папки Prefab файл missile на сцену. Поместите его рядом со зданиями, чтобы было видно как она взлетает.
Чтобы заставить ракету полететь, надо будет применить силу, но не немного, а всю силу, что имеется. В Unity это возможно с помощью компонента Constant Force 2D, который делает именно то, чего вы от него ожидаете: он продолжительно применяет определенную силу Выберите missile в Иерархии и добавьте компонент Constant Force 2D - это быстрая утилита для добавления сил к Rigidbody-объектам. Отлично работает для одноразовых объектов, вроде ракеты, если вы хотите не начинать с большой скорости, а постепенно ускоряться. В ней есть три опции:
Продолжаем работать с ракетой. В компоненте Constant Force 2D установите для Force’s Y значение 20. Нажмите на кнопку Apply (Применить) в верхней части Инспектора, чтобы сохранить изменения в префабе.
Теперь запустите сцену и постарайтесь не смеяться. Ракета летит вверх, но, когда она попадает в верхний барьер, она отскакивает и летит обратно, как будто законы физики ничего не значат для ракет. Мы явно перестарались, ведь барьер должен действовать только для НЛО в нашей Unity-игре.
Выберите Spaceship в Иерархии и в выпадающем списке Layers (Слои) выберите Add New Layer (Добавить новый слой).
Теперь в Инспекторе будет отображаться диалог Tags and Layers (Теги и слои). В секции Layers добавьте новый слой введя Spaceship в поле User Layer 8.
Выберите Spaceship в Иерархии, а после в выпадающем списке - Spaceship.
Вам будет предложено применить этот слой также к «ребенку» корабля. Нажмите на Yes, change children. Это означает, что значение Слоя будет также применено также к любому из игровых объектов этого «ребенка».
Далее выберите Top Barrier в Иерархии. В компоненте Area Effector 2D нажмите на Collider Mask. Снимите галочки везде, кроме Spaceship (самый быстрый способ сделать это - сперва выбрать Nothing (Ничего), а затем выбрать Spaceship.)
Теперь эффектор будет работать только на корабле. Запустите сцену. Ракета улетает ввысь, в то время как НЛО находится в ловушке.
Одной ракеты достаточно для предупредительного выстрела, но, если вы хотите подстрелить инопланетного захватчика, вам понадобится большое огненное шоу). Объект GameManager как раз создан для этого. Выберите его в Иерархии и вы сразу увидите несколько полей.
Поле Missile содержит ссылку на префаб ракеты, который Game Manager использует при создании ракет во время игры. Перетащите в это поле missile из папки Prefab.
Поле Max Missiles определяет, сколько ракет отображается на экране. По умолчанию 10, но не стесняйтесь увеличить это число, если вам кажется этого мало.
И наконец, Max Time Between Missiles - время между запусками ракет. Значение по умолчанию составляет 5 секунд, если вы жаждете наказать инопланетян, уменьшите это значение.
С ракетой на своем месте, выберите missile в иерархии и удалите ее со сцены.
Запустите сцену. Наши ракеты летают, но инопланетяне по-прежнему невредимы. Все потому, что у нас нет обнаружения столкновений.
Кроме того, если вы продолжите смотреть, то вы заметите, что некоторые ракеты отклоняются вправо и влево. Интересно, это оператор пьян или что-то не так в коде?
А дело вот в чем: ракеты попадают область действия эффектора, который выталкивает их, в то время как постоянная сила толкает ракеты вверх.
Вы легко можете настроить Collider Mask на эффекторы местности (Area Effectors), чтобы игнорировать эти ракеты, как вы это делали с верхним барьером, но в нашем случае лучше оставить все как есть, поскольку это придаст некоторую сложность нашей 2D игре на Unity 5.
Бомбы прочь!
Когда с ракетами все круто, что может быть круче, чем взрывать их? Для этого мы используем корабль пришельцев, оборудованный оружием и пулей. Загляните в вашу папку Prefab и перетащите bullet на сцену. Поскольку ракеты взлетают вверх, наши пули должны лететь вниз.
Добавьте компонент Constant Force 2D в bullet и установите для Force напротив Y значение -20. Нажмите на кнопку Применить в верхней части Инспектора, чтобы все экземпляры пули обресли новый компонент. Затем удалите пулю из вашей сцены.
Не всегда необходимо перемещать префаб на сцену, прежде чем его редактировать. Однако, это позволяет вам проверить значения перед тем, как применять их, а это, как правило, именно то, что нужно!
Подготовки пули недостаточно, т.к. нужен еще механизм стрельбы. Откройте ShipController.cs в MonoDevelop. Добавьте следующие переменные экземпляра:
public GameObject launcher;
public GameObject bullet;
private bool isAlive = true;
launcher сохраняет исходную точку пули. При использовании Игрового объекта, вы можете визуально определить, где вы хотите выстреливать пулей. Пуля содержит ссылку на Префаб пули. В заключение, isAlive - простой флаг, который указывает жив игрок, или мертв. Далее, в нижней части Update()
, добавьте следующее:
if (Input.GetKeyDown(KeyCode.Space)) {
if (isAlive) {
Instantiate(
bullet,launcher.transform.position,
Quaternion.identity
);
}
}
С помощью этого кода, космический корабль сбрасывает бомбу каждый раз, когда игрок нажимает на пробел, разумеется, если корабль не был разрушен.
Сохраните скрипт в MonoDevelop и вернитесь обратно в Unity. Выберите Spaceship в Иерархии и, в компоненте Инспектора Ship Controller (Script) вы должны увидеть два поля: Launcher и Bullet.
Космический корабль имеет ребенка игрового объекта по имени Launcher. Перетащите его в поле Launcher. Также перетащите bullet из папки Prefab в поле Bullet.
Запустите сцену и пусть наступит хаос!
Игровой уровень
Ваша игра выглядит весьма забавной, но она никогда не может закончиться. Ракеты летают прямо через ваш корабль, а эти здания больше похожи миражи, чем на реальные препятствия.
Откройте ShipController.cs в MonoDevelop и добавьте следующие переменные экземпляра в класс:
private SpriteRenderer spriteRenderer;
private ParticleSystem explosion;
Так как вам нужно, чтобы космический корабль взрывался, вы должны будете получить доступ к обоим компонентам SpriteRenderer и ParticleSystem. Раньше вы могли просто открыть их с помощью переменных аксессора, но в Unity 5 все гораздо быстрее. Добавьте следующий код в Start()
:
explosion = GetComponent<ParticleSystem>();
spriteRenderer = GetComponent<SpriteRenderer<();
Это дает вам возможность доступа к компонентам в коде. Затем добавьте следующий метод:
void OnTriggerEnter2D(Collider2D collider) {
if (isAlive && collider.gameObject.tag != "Barrier") {
shipRigidbody.velocity = Vector3.zero;
spriteRenderer.enabled = false;
explosion.Play();
isAlive = false;
}
}
Так как все коллизии используют триггеры, используйте OnTriggerEnter2D
. Сперва нужно проверить, жив ли игрок, а триггер не является барьером. Если игрок мертв, то нужно установить скорость игрока на ноль. Это объясняется тем, что положение взрыва не меняется в пространстве.
Далее, вы отключаете SpriteRenderer, чтобы эффективно скрыть корабль из поля зрения. Затем вы запускаете систему частиц взрыва, чтобы показать, что корабль взорвался, а потом, отмечаете, что игрок мертв.
Сохраните скрипт и вернитесь обратнно к нашей 2D игре на Unity. Запустите сцену и полюбуйтесь на эти чудесные огни.
Хотя ваш корабль и сталкивается с обеими ракетами и зданиями, он также будет сталкивается со своими пулями! Такое поведение может быть проблематичным, особенно при движении и стрельбеодновременно. Выберите bullet в папке Prefab.
Как вы это делали раньше, выберите Add Layer из выпадающего меню Layer в Инспекторе чтобы создать новый слой. Назовите его Bullet, затем назначить этот новый слой для префаба bullet.
Наконец, выберите Edit\Project Settings\ Physics 2D и вы увидите целую кучу опций. Нам интересна диаграмма внизу, которая указывает, можгут ли слои взаимодействать друг с другом.
Снимите флажок на пересечении Spaceship и Bullet чтобы столкновение объектов на этих слоях не обрабатывалось. Это не новая фича в Unity 5, но это стоит упомянуть.
Теперь вы можете стрелять не опасаясь взорваться.
Музыка разрушения
Для начала, добавим фоновую музыку. Выберите GameManager в Иерархии и добавьте компонент Audio Source. Из папки Sounds перетащите backgroundMusic в поле AudioClip. Поставьте галочку напротив Loop.
Теперь, при запуске сцены, вы должны услышать музыку.
Займемся звуковыми эффектами. Аудио-источники уже добавлены в необходимые объекты, а их AudioClips (аудио-клипы) находятся на своих местах, так что вам нужно лишь вызвать их.
Во-первых, добавим звук при обрушении здания. В папке Scripts найдите Building.cs и откройте его в MonoDevelop.
Добавьте следующую переменную экземпляра к классу Building
:
private AudioSource collapseSound;
Мы будем использовать collapseSound
collapseSound для хранения ссылки на компонент здания AudioSource
. Здания, включенные в начальный проект уже содержат AudioSource
. Затем добавьте следующее в Start()
:
collapseSound = GetComponent<AudioSource>();
Вы получили ссылку на AudioSource
, так что теперь можете вызвать его в коде. Замените содержимое Update()
на следующее:
if (isDestroyed && onScreen()) {
transform.position = new Vector3(
transform.position.x,
transform.position.y - Time.deltaTime * speed,
transform.position.z
);
if (!collapseSound.isPlaying) {
collapseSound.Play();
}
} else if (isDestroyed && !onScreen()) {
collapseSound.Stop();
}
Если здание на экране обозначается как уничтоженно, этот код проверяет проигрывается ли collapseSound
. Если нет, воспроизведение начинается, а затем здание выносится за пределы экрана. Сохраните скрипт и вернутесь к в Unity. Запустите игровую сцену и, когда вы разрушите здание, вы должны услышать как рушится здание. Теперь откройте ShipController.cs в MonoDevelop, и добавьте следующую переменную экземпляра к классу:
public SoundManager soundManager;
В Update()
() добавьте следующую строчку прямо над той, которая вызывает Instantiate
:
soundManager.DropBomb();
Теперь добавьте следующую строку в OnTriggerEnter2D()
перед установкой shipRigidbody.velocity
:
soundManager.ExplodeShip();
Мы только что добавили звук взрыва корабля. Сохраните скрипт, вернитесь обратно в Unity и выберите Spaceship в Иерархии. Теперь вы увидите поле Sound Manager. Перетащите Игровой объект SoundManager из Иерархии в поле Sound Manager.
Запустите сцену. Теперь ваши бомбы уже не падают в тишине, а звук взрывающегося корабля бесподобен. Наконец, пришло время, чтобы добавить звук взрыва бомб. В папке Scripts откройте файл Bullet.cs в MonoDevelop. Как вы уже делали раньше, добавьте переменную экземпляра для хранения компонента ссылки:
private SoundManager soundManager;
Для инициализации soundManager
, добавьте следующий код в Start()
:
GameObject gameObject = GameObject.Find("SoundManager");
soundManager = gameObject.GetComponent<SoundManager>();
Поскольку компонент Bullet
существует только на префабе, вы не можете назначить игровой объект Soundmanager непосредственно со сцены. вы должны будете обзавестись ссылкой, найдя сцену для GameObject под названием “SoundManager.”
Теперь проиграем звук взрыва, добавив следующую строку в OnTriggerEnter2D()
после вызова explosion.Play()
:
soundManager.HitBuilding();
Сохраните скрипт и вернитесь к Unity. Запустите сцену и постреляйте в некоторые здания - теперь ваши пули должны сочно взорваться.
Аудиомикшер в Unity 5
Пока звуки работают достаточно хорошо, некоторые немного громко, а другие слишком тихо. В предыдущих версиях Unity, вам приходилось настраивать уровень каждого аудиоисточника, в то время как а Unity 5 вы можете настроить их из одного места - в Аудиомикшере.
Вы можете иметь несколько микшеров в вашем проекте. Вообще, и полное погружение в удивительный мир новых звуковых возможностей Unity заслуживает отдельного учебника, чем мы как-нибудь и займемся.
Выберите вашу папку Sounds, затем нажмите правую кнопку мыши и выберите Create\Audio Mixer. Назовите новый объект Game Mixer.
Для просмотра Аудиомикшера, дважды щелкните на нем или выберите Window\Audio Mixer, чтобы открыть нижеприведенную панель:
По умолчанию, всем Микшерам соответствует одна группа Master, в которой вы можете применить аудио эффекты ко всем источникам сразу.
Вы также можете думать о группах, как каналы. Например, к каждой группе применяется эффект ослабления, что позволяет изменять громкость группы, даже когда игра запущена.
Одной из лучших функций микшера является то, что изменения, которые делаются во время игры, будут сохранены редактором после ее завершения. Это позволяет вам настроить аудио до идеального звучания, не записывая изменения, так что вы можете повторить их, когда остановите игру.
Мы собираемся добавить несколько групп. Нажмите кнопку plus sign в Groups чтобы создать новую группу, и назовите ее Music. Затем нажмите на кнопку plus sign снова и создайте группу Sound Effects. Скорее всего, ваши группы будут выглядеть так, как показано ниже:
Новые группы добавляются как дети выбранной группы; группа Music по-прежнему выбрана, когда вы создали следующую новую группу, поэтому она стал ребенком Music. Это был не тот эффект, который был нужен, но об этом их поведении необходимо знать.
Для исправления перетащите группу Sound Effects из Music в Master чтобы сменить ее "родителя". Теперь выберите группу Sound Effects и добавьте новую подгруппу по имени Collapsing Buildings. Теперь вы должны увидеть три микшера:
Теперь вы должны назначить группу Микшера к каждому из аудио источников в вашей сцене. С начала выберите GameManager в Иерархии, а затем посмотрите на его компонент Audio Source (Источник Аудио) в Инспекторе. Нажмите open circle справа от поля Output, чтобы открыть диалоговое окно Select AudioMixerGroup и выбрать в нем Music.
Вам надо установить аудио выход каждого здания в группе Collapsing Buildings.
Выберите BuildingA в Иерархии и shift-click BuildingH, чтобы выбрать все здания сразу (BuildingA, BuildingB, BuildingC, BuildingD, BuildingE, BuildingF, BuildingG и BuildingH). Этот трюк позволяет редактировать общие поля для всех выбранных объектов одновременно.
В Инспекторе установите для поля Output компонента Audio Source значение Collapsing Buildings.
Наконец, установите выход аудиоисточника SoundManager к группе Sound Effects. Теперь запустите вашу сцену.
Чтобы изменить уровень громкости, нажмите кнопку Edit in Play Mode (Изменить в режиме воспроизведения) в верхней части панели Audio Mixer (Аудиомикшер). Имейте в виду, что вы увидите эту кнопку только тогда, когда проигрывается ваша сцена. После того, как вы нажмете на эту кнопку, вы можете изменить громкость. Имейте в виду, что если вы уменьшите громкость одной группы, это снизит громкость и всех подгрупп.
Под регулятором громкости расположены три кнопки. Кнопка S
означает Соло. Она заглушает все остальные треки чтобы вы могли настроить текущий не отвлекаясь на остальные. Кнопка M
означает Mute и позволяет заглушить конкретный трек. Кнопка B
означает Bypass и позволяет игнорировать любые звуковые эффекты, которые вы добавили к треку. Чтобы добавить эффекты в группу, просто кликните кнопку Add… чтобы выбрать один из эффектов. Чтобы его опробовать, нажмите кнопку Add… под каналом Collapsing Buildings и добавьте эффект Echo.
Теперь взорвите здание к чертовой матери, чтобы услышать эффект.
В этот момент не стесняйтесь играть в свою игру и продолжать совершенствовать звук. В GameManager можно временно установить Max Missiles значение 0
, чтобы вы могли сосредоточиться на аудио не опасаясь умереть.
Мы лишь поверхностно разобрали новый аудио миксер в Unity5. Вы также можете, к примеру, прятать группы и сохранять как Виды, которые помогут вам сфокусироваться на различных редактирующих заданиях, а также делать скриншоты для сохранения разных групп настроек – для сравнения или каких-то других целей.
На этом наш небольшой урок по Unity 5 завершен. Вы можете скачать нашу 2D игру на Unity 5 и попробовать внести в нее какие-нибудь изменения. Удачи, до следующих уроков!