如何使用滑块纠正高音量下降

Posted

技术标签:

【中文标题】如何使用滑块纠正高音量下降【英文标题】:How to correct high volume drop off using a slider 【发布时间】:2019-04-28 13:56:32 【问题描述】:

这是我第一次使用音量滑块,它是 Unity3D 网站上的 3D 射击教程中提供的。滑块可以工作,但在滑块中间大约之后,音量已经几乎不可察觉。与我习惯的滑块相比,这种尺寸的滑块下降得太快了,我猜有一些三角函数可以用来使下降更平滑,但我不太熟悉他们呢。有谁知道纠正这个问题的好方法?谢谢!这是我的代码

编辑:我也发现了这个 VolumeHandler 脚本。我会放在第一个之后

using UnityEngine;
using System.Collections;
using UnityEngine.Audio;

public class MixLevels : MonoBehaviour 

    public AudioMixer masterMixer;

    public void SetSfxLvl(float sfxLvl)
    
        masterMixer.SetFloat("sfxVol", sfxLvl);
    

    public void SetMusicLvl (float musicLvl)
    
        masterMixer.SetFloat ("musicVol", musicLvl);
    


using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class VolumeHandler : MonoBehaviour 

    // Use this for initialization
    void Start () 
    
        if(GameObject.Find("EffectsSlider"))
        GameObject.Find("EffectsSlider").GetComponent<Slider>().onValueChanged.AddListener(SetVolume);
    

    void SetVolume(float volume)
    
        GetComponent<Audiosource>().volume = volume;
    

    void OnDestroy()
    
        if(GameObject.Find("EffectsSlider"))
        GameObject.Find("EffectsSlider").GetComponent<Slider>().onValueChanged.RemoveListener(SetVolume);
    

【问题讨论】:

你能发布滑块的“Inspector”截图吗? 您不需要三角函数。我认为您可以通过一个简单的对数函数传递滑块的输入值。输入域应从 1 开始。您可能必须使用日志的基数。 desmos.com/calculator/osibvmz8ga 要获得音量的可听线性,该函数是一个正方形。如果 Unity 将其立方化,我不会感到惊讶。他们几乎从不以所有其他软件和界面做事的方式做事。 【参考方案1】:

如果大约在滑块中间之后,音量已经几乎察觉不到,这意味着中间的值应该是滑块上的最大值。

选择滑块并将最大值更改为滑块中间的值,当音量变得几乎不可察觉时。您也可以通过具有Slider.maxValue 属性的代码执行此操作。至于平滑度,请确保未在滑块上启用“整数”。如果启用,则滑块值将是 int 而不是 float,这可能会导致问题。

【讨论】:

以上是关于如何使用滑块纠正高音量下降的主要内容,如果未能解决你的问题,请参考以下文章

如何使用音量滑块控制音轨?

如何连接其中的音量滑块以使用它

如何使用滑块更改 HTML5 音频音量或轨道位置? [复制]

如何自定义滑块控件,如 wpf 中的音量

按下音量按钮时更改音量滑块位置

如何在 Mac 的 xcode 中为 AVPlayer 制作音量滑块