Как сделать регулировку громкости с помощью слайдера?
Делаю настройку громкости музыки и эффектов, нашёл несколько видео-примеров, повторяю как там, но результат другой.
public AudioMixerGroup Mixer;
public void ChangeVolumeMusic(float volume)
{
Mixer.audioMixer.SetFloat("MusicVolume", Mathf.Lerp(-80, 0, volume));
}
Метод к слайдеру прилепил, но когда я начинаю хоть каплю изменять слайдер, то звук сразу прекращается, но на видео он работает исправно, в чем может быть проблема?
Вы бы хоть посмотрели в документации, что такое Mathf.Lerp, прежде чем слепо слепо копипастить код из видео: https://docs.unity3d.com/ru/2019.4/ScriptReference.... Вам здесь lerp абсолютно не нужен, ибо, если установить t меньше единицы, то, пытаясь установить громкость на 100(или другое число), у вас она будет меньше 100. А если t будет равно 1, то смысла в линейной интерполяции нет. Mathf.Lerp(-80, 0, volume) замените на просто volume.
yraiv, Вы просто прикрепили этот скрипт на слайдер и в OnValueChanged у слайдера вызываете метод ChangeVolumeMusic? То есть выглядит все примерно так: ?
yraiv, Вы сейчас просто устанавливаете значения звука в 0 при изменении слайдера. Вам нужно в коде брать значение слайдера и устанавливать его в mixer.
что-то типа этого должно получиться. [SerializeField] нужен, чтобы private поля отображались в инспекторе. Если вы напрямую с децибелами работаете, то mathf.Lerp будет работать, если же есть прослойка, которая конвертирует их в проценты - то нет.
yraiv, Так. Вы как все делаете? Мой код нужно поместить в отдельный MonoBehaviour, этот MonoBehaviour поместить на слайдер или куда-нибудь на сцене, закинуть в поля аудио миксер и слайдер соответственно аудиомиксер и слайдер со сцены(Если у вас не аудиомиксер, то вам нужно изменить мой код и подставить туда свои методы изменения звука), В СЛАЙДЕРЕ В ИНСПЕКТОРЕ НЕ ДОЛЖНО БЫТЬ НИЧЕГО В ПОЛЕ ON VALUE CHANGED. Всё. Советую вам пройти официальный курс от юнити, чтобы получить базовые знания о том, как все работает
K0TlK, а как-то можно задать значение громкости в слайдер?
тип мне надо, чтоб если я в другой сцене открыл настройки звука, то слайдер бы получал значения, которые я изменил до этого. А то я открываю в одной сцене, меняю звук, потом другая сцена, открываю натсройки, а там звук на максимум, хотелось бы получить данные звука и приравнять слайдер volume к их результату.
public Slider SliderMusic;
private void Start()
{
SliderMusic.value = Mixer.audioMixer. // что-то такое есть?
}
yraiv, Чтобы проще было работать, слайдеру в инспекторе задайте минимальное значение на -80, максимальное на 0. А в методе, который устанавливает громкость, уберите Lerp. Есть метод GetFloat у аудиомиксера что-то типа этого должно получиться:
if(_audioMixer.GetFloat("Volume", out float value))
{
_slider.value = value;
}