【问题标题】: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;
}
}