Изменение тональности звука
Есть звук, нужно чтобы при воспроизведении его тональность случайно изменялась условно от -10 до +10 Как это сделать? Или это невозможно и нужны разные звуки?
Ответы (1 шт):
В классе AudioSource есть поле pitch, который контролирует тональность звука.
Есть два решения
1. Решение через код:
Для его изменения требуется создать скрипт где будете контролировать воспроизведение звука к примеру скрипт - Audio.cs
Показываю пример на изменение тональности на нажатие кнопки.
Audio.cs
using UnityEngine;
public class Audio : MonoBehaviour
{
[SerializeField] private AudioSource _UIAudioSource;
public void PlayUIAudioSource(AudioClip audioClip)
{
// назначает аудио для UI Audio Source
_UIAudioSource.clip = audioClip;
// базовое значение pitch = 1, следующая строка создаёт случайное значение от 0.8 до 1
// значение ниже 1 это уменьшение тональности, значение выше 1 это увелечение тональности
_UIAudioSource.pitch = Random.Range(0.8f, 1);
// Включает отправленное аудио
_UIAudioSource.Play();
}
}
Создаем обьект с компонентом AudioSource называем её UI Audio Source, будем использовать его для кнопок и желательно выключаем PlayOnAwake чтобы аудио не запускались при активации обьекта если там будет аудио, будем это контролировать в коде.
Далее создаём пустой обьект и добавляем в него созданный нами Audio.cs с таким же названием, и в поле UI Audio Source выбрасываем созданный до этого обьект с таким компонентом.
Теперь на нашей кнопке в событие OnClick() добавляем метод созданный нами в Audio.cs

Выбераем в появившимся поле необходимый аудио клип, и можно нажимать на кнопку которая будет менять тональность случайным образом.
2. Решение через инспектор в редакторе
В обьекте с AudioSource можно менять перед запуском игры поле Pitch, эффект такой же, только с указанием конкретного значения

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

