Как сделать кнопку отключения звука в unity

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

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

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

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

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

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

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

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

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

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

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

Обратите внимание на флажок "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", когда игрок нажимает на нее.

Метод OnGUI применяется в каждом кадре и вставляет весь код, в котором отображен элемент GUI: полоса жизни, меню, интерфейс и т.д. Объект GUI позволяет нам быстро создать компоненты GUI из кода, как кнопка с методом GUI.Button .

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

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

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

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

Нажмите в меню 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" и добавляется к сцене.

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

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

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

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

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

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

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

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

Папка "Resources" занимает в Unity особое место. Чтобы загрузить ее содержимое, используйте метод Resources.Load() . Так вы получите возможность добавлять объекты прямо во время игры, и эти объекты могут быть созданы самими пользователями (как насчет модов?).

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

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

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

Как я могу остановить один звук при воспроизведении другого?

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

EDIT: ответ должен изменить a-lot из-за комментариев, оставленных под ним. Имеет смысл переписать все.

Вам нужна ссылка, указывающая на весь AudioSource . Храните каждый экземпляр ClickAction в List , в другом скрипте ( PlayerManager ). Перед воспроизведением звука пройдите через этот List и прекратите воспроизведение, если он воспроизводится. После этого вы сможете воспроизвести аудио.

Кроме того, вы в настоящее время вызываете Resources.Load каждый раз, когда хотите воспроизвести аудио. Это нехорошо с точки зрения производительности. Вы должны сделать это один раз в функции Start() , а затем воспроизвести его, когда это необходимо. Кроме того, ваш gameObject.AddComponent() следует вызывать только один раз.

Ваш новый скрипт ClickAction :

PlayerManager . Создайте GameObject под названием PlayerManager , а затем приложите к нему сценарий:

Когда playAudio функция playAudio , она останавливает все аудиосигналы из AudioSource которые хранятся в List , затем он будет воспроизводить текущий AudioSource который передается в него.

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

Это невозможно в Unity, потому что:

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

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

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

Грубый пример, чтобы понять суть:

Чтобы отрегулировать громкость SFX, измените мастер-громкость аудио-прослушивателя. Чтобы отрегулировать громкость музыки, измените громкость звука (источников) музыки.

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

Подробное объяснение того, как использовать Audio Mixer в Unity

Введение:

Подробное объяснение того, как использовать Audio Mixer в Unity

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

Теперь у нас есть три фона, звуковые эффекты, чтобы сделать подробное объяснение


1. Импортируйте аудио ресурсы и создайте панель управления



2. Создать источник звука



3. Создать аудио микшер

Метод создания: создайте папку Mixer ——> правой кнопкой мыши ——> Create ——> Audio Mixer


Измените имя на MasterMixer, мы можем использовать его для управления общей громкостью

4. Создание музыки и SoundEffect для управления фоновой музыкой и звуковыми эффектами


5. Перетащите контроллер на аудио-носитель


Схема членства контроллера


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

6. Параметры воздействия


Следуйте приведенному выше рисунку по очереди, чтобы получить следующий рисунок


7. Создать скрипт управления Audio Mixer

8. Перетащите в скрипт управления


9: элемент управления использует компонент сценария элемента управления


10. Измените минимальное и максимальное значения ползунка

Но теперь ползунок может изменять значение параметра только от 1 до 0, а уровень звука не изменился, поэтому нам нужно изменить минимальное и максимальное значения ползунка, чтобы решить

Читайте также: