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

时间:2015-03-24 16:22:10

标签: user-interface unity3d slider

我希望有人能告诉我如何使用新的UI系统为滑块设置audiolistener主音量。 我的意思是我知道我可以使用音频源,但我怎么能为已经有滑块音量的所有音频文件togheter做呢? 当我将主摄像机置于On Value更改字段并设置音频Listerner - >音量时,它会显示:Missing AudioListener.set_volume

虽然我现在通过脚本用旧的gui系统做到这一点,但我有点困惑它是如何工作的。

1 个答案:

答案 0 :(得分:0)

只是一个想法...

创建一个对整个系统来说是全局的静态类,它具有一个静态值,用于" MasterVolume"水平。然后,您可以向其添加一个其他音频脚本控件可以订阅的EventHandler。然后,当设置主卷时,您将广播它们更改的那些实例。然后,在每个音频收听中可以更新它自己的基本音量级别* MasterVolume设置为的百分比。

这样,在一些控件上可能有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;
    }
}