如何在 Unity 中将 Mixer 的音量设置为滑块的音量?

Qed*_*zed 3 c# audio mixer unity-game-engine uislider

我正在尝试进行一些音频设置。这是我的脚本:

public AudioMixer masterMixer;
public float masterLvl;
public float musicLvl;
public float sfxLvl;

public void SetMasterVolume ()
{
    masterLvl = masterVolumeSlider.value;
    masterMixer.SetFloat("masterVol", masterLvl);
}

public void SetMusicVolume()
{
    musicLvl = musicVolumeSlider.value;
    masterMixer.SetFloat("musicVol", musicLvl);
}

public void SetSfxVolume()
{
    sfxLvl = sfxVolumeSlider.value;
    masterMixer.SetFloat("sfxVol", sfxLvl);
}
Run Code Online (Sandbox Code Playgroud)

它具有所有 OnValueChanged(); 滑块上的东西。我只想知道为什么这不起作用。谢谢。

编辑:所以问题是它改变了dB,而不是音量。新问题是:如何让它改变音量而不是 dB?

编辑 2:截图。 混音器截图

Bod*_*dix 6

我认为,您的问题是混合器值 (-80db - 20db) 是对数刻度,而滑块值是线性的。例如:一半的音量实际上约为 -10db,但如果将其连接到线性刻度,如滑块,那么一半的音量最终将是 -40db!这就是为什么在那个时候它听起来基本上是沉默的。

有一个简单的方法来修复它:

  1. 不要将滑块的最小值/最大值设置为 -80 和 20,而是将它们设置为最小值 0.0001 和最大值 1。

  2. 在设置暴露参数值的脚本中,使用它来将线性值转换为衰减级别:

     masterMixer.SetFloat("musicVol", Mathf.Log10(masterLevel) * 20);
    
    Run Code Online (Sandbox Code Playgroud)

将最小值设置为 0.0001 很重要,否则将其一直降为零会破坏计算并再次提高音量。

邮政:

https://forum.unity.com/threads/changed-audio-mixer-group-volume-with-ui-slider.297884/