Как добавить музыку в игру unity

2D игра на Unity. Подробное руководство. Часть 6

Начнем подыскивать звуковый файлы для нашей игры. Самое главное — сохраняйте все свои звуки в несжатом 8bit .wav формате. В дальнейшем, в самом Unity можно будет сжать звук, не изменяя исходного .wav файла. Вот, что мы можем сделать:

  • Купить мелодию.
  • Попросить знакомого музыканта.
  • Использовать бесплатные звуки из звуковых банков (например, FindSounds or Freesound).
  • Записать звук самому.

С музыкой немного сложнее, но тоже все решаемо:

  • На сайте Jamendo много музыки разных музыкальных направлений. Будьте осторожны с лицензиями для коммерческих целей.
  • Иногда любители выкладывают свою музыку на рутрекере.
  • Воспользуйтесь продуктом Bosca Ceoil от Терри Кавана для создания своей, неповторимой мелодии.

Итак, создайте или найдите звуки взрыва и выстрела. Если вам лень, вы можете использовать эти:

Мы будем использовать один из треков игры «Больное бумажное приключение», Спинтроник для этого урока:

Импорт звука в Unity

Переместите 4 звуковые дорожки в папку «Sounds». Убедитесь, что для каждой из во вкладке «Инспектор» отключен «3D звук» (так как мы делаем 2D игру) и нажата кнопка «Применить». Вот и все.

Отключение 3D звука

Для воспроизведения музыки, просто перетащите песню во вкладку «Иерархия» (Hierarchy). Мы приглашаем Вас:

  1. Переименуйте новый игровой объект в «Музыка».
  2. Поместите его на (0, 0, 0) .

Объект музыка

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

Добавьте этот скрипт в игровой объект и заполните его поля со звуковыми клипами:

скрипт для звуков

  1. SoundEffectsHelper.Instance.MakeExplosionSound(); в «HealthScript», только после воздействия частиц.
  2. SoundEffectsHelper.Instance.MakePlayerShotSound(); в «PlayerScript», сразу после weapon.Attack(false); .
  3. SoundEffectsHelper.Instance.MakeEnemyShotSound(); в «EnemyScript», сразу после weapon.Attack(true); .

Запустите игру и прислушайтесь. Да, у нас теперь есть звуки и музыка!

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

Меню — загрузка и перезапуск игры

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

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

фон меню

Это наши фон и логотип. Импортируйте их в проект. Вы можете поместить их в «Меню» — подпапку «Текстуры». В противном случае «фон» сотрет предыдущий файл игры. Для кнопок мы будем использовать стандартные (уродливые) кнопки Unity.

Главное меню

Настало время создать сцену с главным меню. Это то, что показывается юзеру при запуске игры. Для начала, создайте новую сцену:

  1. «File» -> «New scene».
  2. Сохраните ее в папке «Scenes» как «Menu».

Наше главное меню будет состоять из:

  • Фона.
  • Логотипа.
  • Скрипта, который будет отображать кнопки.
  1. Создайте новый спрайт.
  2. Установите его в (0, 0, 1) .
  3. Задайте размер (2, 2, 1) .
  1. Создайте новый спрайт.
  2. Установите его в (0, 2, 0)
  3. Задайте размер (0.75, 0.75, 1)

Вот, что у вас должно получиться:

результат

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

Теперь мы добавим кнопку «начать игру» с помощью скрипта. Создать скрипт по имени «MenuScript» в папке «Scripts», и приложите его к новому пустому игровому объекту под названием «Scripts»:

Мы просто рисуем кнопку, которая будет загружать сценe «Stage1», когда игрок нажимает на нее.

Теперь запустите игру и полюбуйтесь нашим замечательным меню:

Законченная кнопка

Жмем и. Катастрофа!

То, что нам нужно сделать четко написано в сообщении об ошибке.

Добавление сцен в сборку

Нажмите в меню Unity на «File», затем на «Build Settings»:

Build settings

Теперь перетащите все сцены, которые должны быть в вашей игре. Здесь все просто: это «Меню» и «Stage1».

Добавление сцен

Вернитесь в меню. Нажмите на кнопку и . играть!

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

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

Наконец, мы позволим игроку начать игру сначала после того, как его персонаж умер. И, как вы, возможно, заметили, заметили происходит достаточно часто. Давайте «упростим» игру. Вот, что у нас сейчас происходит:

  1. Игрок попадает под пули.
  2. HealthScript.OnCollisionEnter запускается.
  3. Игрок теряет 1 единицу здоровья.
  4. «HealthScript» уничтожае игрока, так как у него меньше, чем 1 единица здоровья.

Мы добавим два новых действия:

  1. Вызывается PlayerScript.OnDestroy .
  2. Создается «GameOverScript» и добавляется к сцене.

Создайте в папке «Scripts» новый скрипт по имени «GameOverScript». Это маленький кусочек кода, который будет отображать кнопки «Начать сначала» и «Назад в меню»:

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

Теперь, в «PlayerScript», нам нужно привязать этот новый скрипт к смерти:

Запустите игру и попытайтесь умереть (это не должно занять много времени):

Игра окончена

Вы можете найти скрипт где-то на сцене:

Скрипт окончания игры

Конечно, вы можете улучшить скрипт, например, добавив в него счет или анимациИ.

Если вы хотите провернуть что-нибудь эдакое, можете создать «GUI Skin».

  • «Assets» -> «Create» -> «Gui Skin»:

Вы можете изменить интерфейс в «Inspector», чтобы сделать игру более интересной. Убедитесь в том, что этот скин лежит в папке «Resources» (Ресурсы).

Тем не менее, скин не применяется до тех пор, пока вы не вызовите его в вашем скрипте. Во всех наших предыдущих сценариях GUI, мы должны загрузить скин только один раз, а не в каждом кадре, используя GUI.skin = Resources.Load («GUISkin»); .

Вот пример в «MenuScript» (проследите, как действует метод Start() ):

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

Как сделать фоновую музыку в Unity

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

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

Далее нам нужно определиться, какой объект будет воспроизводить музыку. Это может быть абсолютно любой объект. Но лично я буду воспроизводить музыку с помощью моей стандартной камеры, Main Camera. Поэтому, для этого я для своей камеры в окне Inspector создаю новый компонент Audio Source — который отвечает за хранение и воспроизведение аудиофайла.

После добавления компонента Audio Source, нас интересуют три поля:

  • В поле AudioClip, необходимо из окна Project, перетащить Ваш аудиофайл.
  • В поле Play On Awake поставить галочку, чтобы музыка воспроизводилась сразу после того, как загрузится на сцене игровой объект, к которому прикреплён данный аудиофайл.
  • В поле Loop так же поставьте галочку, чтобы после окончания вашего аудиофала, он воспроизводился снова.

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

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

На этом всё. Если статья для Вас была полезной, буду рад Лайкам и комментариям.

Sound Manager для небольших игр и прототипов на Unity

Воспроизвести звук в Unity просто. Нужно создать компонент AudioSource прикрепить к нему звуковой файл в виде AudioClip и вызвать audioSource.Play() из скрипта. Или даже поставить автовоспроизведение на при создании объекта(Play on Awake).

Сложности начинаются когда звуков в игре становится много. Их все нужно расставить, прописать приоритеты. Звуки отдельно, музыку отдельно. При регулировке громкости звуков и музыки раздельно тоже сложности. Можно, конечно, регулировать громкость разных каналов в AudioMixer, но он не работает в WebGL. А Webplayer сейчас считается устаревшим.

А если какой то звук повторяется несколько раз подряд(например игрок быстро нажимает на кнопку и играет звук клика), то хорошо бы чтобы тот не обрывался на середине, а начинался новый, не мешая предыдущим. Да еще и при включении паузы звуки игры нужно ставить на паузу, а звуки меню нет. Из коробки такая возможность в Unity есть, но почему то доступна только из скрипта и не все о ней знают.

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

Итак что же должен представлять собой SoundManager? Ну во первых им должно быть удобно пользоваться. То есть никаких «найти объект на сцене», «присоеденить компонент» и прочего для пользователя, все внутри. Так что сразу делаем его синглтоном(Код сокращен, чтобы выделить суть).

Теперь менеджер сам создаст себя на сцене, так что добавлять его самостоятельно не нужно(и не рекомендуется). Создается он по префабу, путь до которого прописан в коде, так что перемещать префаб не стоит. Можно создавать и с помощью new GameObject() и AddComponent() если хочется. UPD. Теперь создается не по префабу. Кроме того объект сразу помечается с помощью DontDestroyOnLoad. Нужно это для того чтобы музыка и звуки продолжали играть без перебоев при перезагрузках сцен.
Теперь к любым методам можно обращаться просто написав SoundManager.Instance.Method(). Чтобы еще немного сократить эту запись для всех методов я дописал статический враппер:

Так что писать можно даже еще короче SoundManager.Method().

Объект есть, работать с ним удобно. Дальше добавляем функциональность. Самая необходимая функция это PlaySound:

Для начала несколько проверок звука. Что он не пустой и что таких звуков не стало слишком много(Если где то в цикле по ошибке вызывается). После чего загружаем звук из ресурсов, ждем загрузки, создаем новый объект на сцену, добавляем AudioSource, настраиваем его и запускаем. Функция LoadClipAsync запускает асинхронную загрузку звукового файла из ресурсов по имени. Так что файл надо будет положить в папку «Resources/Sounds/Sounds». Создание объекта происходит по префабу, который загружен из ресурсов. Так что часть параметров(вроде приоритета звука), можно установить префабу из инспектора. Громкость устанавливается так же у каждого объекта отдельно. В отличие от установки громкости AudioListener-у это позволяет регулировать громкость звуков и музыки раздельно. Сохраним объект в списке звуков _sounds, чтобы иметь возможность регулировать его громкость и уничтожать по окончанию.

Параметр pausable нужен чтобы разделить UI звуки и игровые звуки. Первые должны играться всегда и никогда не ставиться на паузу. Вторые приостанавливаются во время паузы и продолжаются при возобновлении игры. Делается это автоматически с помощью флага soundSource.ignoreListenerPause, который почему то недоступен из Inspector-а.

Далее нам нужен метод для добавления музыки в игру. В целом код похож на добавление звука, но используется другой префаб(с дургим приоритетом и настройкой loop).

В большинстве неболших проектов достаточно одного трека проигрывающегося в данный момент, так что запуск новой музыки останавливает предыдущие треки автоматически, так что на каждой сцене достаточно вызвать лишь SoundManager.PlayMusic(«MusicForCurrentScene»); Кроме того при создании и остановке музыки добавляется плавное нарастание громкости и плавное угасание. Это позволяет сделать переход плавным и не бьет по слуху. Само плавное изменение громкости можно делать Tween-ом, но можно и ручками, чтобы было меньше зависимостей.

Дальше нам нужна возможность поставить паузу. Так как у всех звуков уже проставлена настройка ставятся ли они на паузу при паузе AudioListener-а, то методы получаются очень простыми.

Либо можно настроить автоматическое включение паузы.

Дальше нам потребуются методы установки и получения громкости.

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

Ну вот и все. SoundManager, которым легко пользоваться готов. Так как мы вынесли шаблоны для звуков и музыки в префабы, то к ним легко можно подключить output из AudioMixer-а. Кроме того есть еще небольшой класс, упрощающий вызовы нужных методов из анимаций, обработчиков кнопок и пр, чтобы не нужно было писать скрипт из-за одной строчки.

Плюсы полученного менеджера:
+ Простота в использовании
+ Чистый код и объекты сцены. Не нужно вешать компоненты звука нигде, искать и вызывать их из кода
+ Музыка, которая не прерывается при загрузке сцены и меняется плавно
+ Геймплейные и UI звуки
+ Поддержка паузы
+ Поддержка AudioMixer
+ Работа на всех платформах, включая не поддерживающие AudioMixer (например WebGL)
+ Поддержка голоса рассказчика(в статье не упомянуто, но в полном коде реализовано)

Ограничения текущей реализации(Пока нету):
— Пока нет позиционного 3d звука
— Изменения pitch-а звука, чтобы много кратное повторение одинаковых звуков не приедалось
— Загрузка звука при использовании может приводить к лагам(Незаметно на мелких проектах и небольших звуках)
— Нет регулировки громкости отдельно взятого звука
— Нет зацикленных звуков, вроде амбиента

Как добавить музыку в Unity (Юнити)

Привет, друзья! Школа программирования для детей PIXEL продолжает серию уроков по Unity для детей и подростков! Вместе мы изучаем язык программирования C# (Си Шарп) и учимся писать скрипты. В этом уроке мы разберем, как добавить звуки в Юнити, чтобы сделать игру еще более атмосферной!

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

Подробную видеоинструкцию вы найдете в конце статьи.

Создание кнопок

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

музыка unity
На нем делаем четыре кнопки.

юнити музыка
Далее кнопки приводим к такому виду, который показан на скриншоте.

юнити как сделать звук

Написание скрипта

Создаем скрипт soundManager.

игра unity музыка
В скрипте объявляем массив звуков и переменную типа AudioSource.
AudioSource — это компонент, который позволяет воспроизводить звуки.

звук в юнити
Далее создаем для каждой кнопки функцию, всего их четыре (функции Start и Update можно удалить).

unity проиграть звук
a.clip = sound[0]; — подгружаем нужный нам звук, указывая элемент массива.
a.Play(); — воспроизводим звук.

unity фоновая музыка
Скрипт:

как сделать звук в unity
Сохраняем скрипт. Переходим в Юнити. Создаем пустой объект, даем ему такое же название: SoundManager.

как сделать музыку в юнити
На этот объект добавляем компонент AudioSource.

unity звук кнопки
На объект SoundManager перемещаем скрипт. Указываем размерность массива (Size). Каждому элементу массива назначаем свой звук. В А добавляем объект, которому назначен компонент AudioSource.

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

unity 2d звуки
Запускаем и проверяем.

Полный скрипт программы:

public class SoundManager : MonoBehaviour
public AudioClip[] sound;
public AudioSource a;
// Start is called before the first frame update
public void oneSound()
a.clip = sound[0];
a.Play();
>
public void twoSound()
a.clip = sound[1];
a.Play();
>
public void treeSound()
a.clip = sound[2];
a.Play();
>
public void fourSound()
a.clip = sound[3];
a.Play();
>
>

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

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

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