Этот урок посвящен добавлению звуковых эффектов в игру. Любая игра должна содержать звуковое сопровождение – музыку или звуковые эффекты. В нашей игре будут три звука: щелчок кнопки, звук выигрыша и звук проигрыша. Также реализуем кнопку включения/выключения звука.
Источники звуковых эффектов
Рекомендуется искать звуковые ресурсы на зарубежных сайтах (американских или английских), поскольку на российских и украинских ресурсах распространён пиратский контент. Например, на freesound.org можно найти бесплатные звуки и музыку. Регистрация на сайте позволяет скачивать бесплатные файлы, а платные – приобретать.
Организация проекта
Создадим папку Audio в проекте для хранения звуковых файлов. В неё поместим три скачанных файла: click (щелчок), lose (проигрыш) и win (выигрыш). Настройки звуковых файлов изменять не нужно.
Реализация управления звуком
Откроем скрипт GameControl.cs и добавим функциональность для управления звуком, используя PlayerPrefs:
// ... другой код ...
public GameObject musicOn;
public GameObject musicOff;
public void MusicOnOff()
{
if (PlayerPrefs.GetString("music") != "on")
{
PlayerPrefs.SetString("music", "on");
musicOn.SetActive(true);
musicOff.SetActive(false);
}
else
{
PlayerPrefs.SetString("music", "off");
musicOn.SetActive(false);
musicOff.SetActive(true);
}
}
void Start()
{
if (PlayerPrefs.GetString("music") == "off")
{
musicOn.SetActive(false);
musicOff.SetActive(true);
}
else
{
musicOn.SetActive(true);
musicOff.SetActive(false);
}
}
// ... другой код ...
Для корректной работы с кнопкой добавим проверку имени объекта:
if (gameObject.name == "Music") {
MusicOnOff();
}
Добавление звуковых компонентов и проигрывание звуков
Добавим компонент AudioSource ко всем кнопкам, к которым нужно прикрепить звуки. Убедимся, что флажок Play On Awake снят. Для проигрывания звуков используем GetComponent<AudioSource>().Play().
Чтобы звук воспроизводился после перезагрузки сцены, создадим отдельный игровой объект ClickAudio, который не будет уничтожаться при загрузке новой сцены. Создадим скрипт DontDestroyOnLoad.cs:
using UnityEngine;
public class DontDestroyOnLoad : MonoBehaviour
{
void Start()
{
DontDestroyOnLoad(gameObject);
}
}
Прикрепим этот скрипт к объекту ClickAudio. Теперь в GameControl.cs будем использовать FindGameObjectWithTag("Audio").GetComponent<AudioSource>().Play(). Если объект с тегом «Audio» отсутствует, создадим новый объект ClickAudio.
Звуки выигрыша и проигрыша
Добавим звуки lose и win к соответствующим игровым объектам (LostPanel и главному кубику). Добавим код для проигрывания этих звуков. В случае выключения звука, используем audioSource.mute = true;.
Дополнительные улучшения
Добавим Random.ColorHSV() к главному кубику для изменения цвета при каждом запуске. Также немного изменим размер кнопок для улучшения внешнего вида.
В итоге мы реализовали функциональность управления звуком в игре, включая его включение/выключение и воспроизведение звуковых эффектов при различных событиях.