我希望有人能告诉我如何使用新的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;
}
}