【问题标题】:unity 4.6 UI how to set a slider main volume for all sound?unity 4.6 UI 如何为所有声音设置滑块主音量?
【发布时间】:2015-05-28 01:42:57
【问题描述】:

我希望有人能告诉我如何使用新的 UI 系统为滑块设置 audiolistener 主音量。 我的意思是我知道我可以使用音频源,但是我该如何处理所有已经拥有自己的滑块音量的音频文件呢? 当我将主摄像头放在 On Value 更改字段中并设置音频侦听器时 -> 音量它说: Missing AudioListener.set_volume

虽然我现在通过脚本使用旧的 gui 系统执行此操作,但我有点困惑它是如何工作的。

【问题讨论】:

    标签: user-interface unity3d slider


    【解决方案1】:

    只是一个想法......

    创建一个对整个系统都是全局的静态类,它具有“MasterVolume”级别的静态值。然后,您可能可以向其中添加其他音频脚本控件可以订阅的 EventHandler。然后,当主卷被设置时,您将广播到它更改的那些实例。然后,在每个音频收听中都可以更新它自己的 baseVolume 级别 * 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-13
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多