我希望有人能告诉我如何使用新的UI系统为滑块设置audiolistener主音量。 我的意思是我知道我可以使用音频源,但我怎么能为已经有滑块音量的所有音频文件togheter做呢? 当我将主摄像机置于On Value更改字段并设置音频Listerner - >音量时,它会显示:Missing AudioListener.set_volume
虽然我现在通过脚本用旧的gui系统做到这一点,但我有点困惑它是如何工作的。
答案 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;
}
}