unity 4.6 UI如何为所有声音设置滑块主音量



我希望有人能告诉我如何使用新的UI系统为滑块设置audiolister主音量。我的意思是,我知道我可以使用音频源,但我怎么能为所有已经有自己的滑块音量的音频文件转换器做呢?当我将主摄像头放在On Value change字段中并设置audio Listener-->音量时,它会显示:Missing AudioListener.set_volume

当我通过脚本使用旧的gui系统时,我现在有点困惑它是如何工作的。

只是一个想法。。。

创建一个对整个系统全局的静态类,它具有"MasterVolume"级别的静态值。然后,你可以向其中添加一个EventHandler,其他音频脚本控件可以订阅。然后,当设置主音量时,你可以将其广播到更改的实例。然后,在每次音频收听中,都可以更新自己的基本音量级别*主音量设置为%。

这样,在一些控件上,其音量可能为10%,而另一个控件的音量为60%。然后,如果主音量下降到50%。10%将降至5%,60%降至30%,因此它们之间保持各自相同的体积。如前所述,关于音频控制,我不太熟悉,也没有Unity在我面前进行参考和测试。

public static class MyMaster
{
    // Allow any object to subscribe when the master volume changes
    public static event EventHandler VolumeChanged;
    private static float _masterVolume;
    public static float MasterVolume
    {
        get { return _masterVolume; }
        set { _masterVolume = value;
                // now, only if something IS subscribed, call it out
                // and pass the updated volume to them.  This way, you
                // dont have to know when Unity does the update, the 
                // EventHandler immediately sends the broadcast.
                if( VolumeChanged != null )
                    // Send the volume as a PERCENT
                    VolumeChanged( _masterVolume / 100.0f, null );
        }
    }
}

public class YourAudioListener : MonoBehavior
{
    public float BaseVolume = 10.0f;
    public void Start()
    {
        // When your control starts, add itself to the 
        // master event handler for volume
        MyMaster.VolumeChanged += MyMaster_VolumeChanged;
    }
    // This is the local object's instance script that will be called
    // when the master volume has changed.
    void MyMaster_VolumeChanged(object sender, EventArgs e)
    {
        // Not sure about actual audio control... but...
        tmp.VolumeProperty = BaseVolume * (float)sender;
    }
}

最新更新