Звуки в Unity 5: Android игра — урок 11

Этот урок посвящен добавлению звуковых эффектов в игру. Любая игра должна содержать звуковое сопровождение – музыку или звуковые эффекты. В нашей игре будут три звука: щелчок кнопки, звук выигрыша и звук проигрыша. Также реализуем кнопку включения/выключения звука.

Источники звуковых эффектов

Рекомендуется искать звуковые ресурсы на зарубежных сайтах (американских или английских), поскольку на российских и украинских ресурсах распространён пиратский контент. Например, на 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() к главному кубику для изменения цвета при каждом запуске. Также немного изменим размер кнопок для улучшения внешнего вида.

В итоге мы реализовали функциональность управления звуком в игре, включая его включение/выключение и воспроизведение звуковых эффектов при различных событиях.

Что будем искать? Например,программа