我想从游戏的主菜单统一禁用所有音频源,并通过单击按钮使其影响游戏中的所有场景。我也想通过单击另一个按钮(“静音按钮”和“取消静音按钮”)来启用它。我设法通过AudioListener.pause函数完成了此任务。但是,当我使用!AudioListener.pause播放声音时,它的作用就像是恢复声音并播放所有暂停的声音一样,造成声音混乱。我该怎么办?
答案 0 :(得分:2)
如果您只是想使所有内容静音,则可以尝试修改主相机对象上的AuidoListener.volume
,以使其不输出在场景中拾取的任何声音。 / p>
您甚至不必引用AudioListener组件,因为AudioListener.volume
是该类的静态属性。要取消静音,您只需引用类名本身,然后执行以下操作:
public void MuteAllSound()
{
AudioListener.volume = 0;
}
public void UnMuteAllSound()
{
AudioListener.volume = 1;
}
有关更多信息,请查阅有关AudioListener组件的Unity文档。
或者,您可以尝试通过设置AudioSource.volume = 0
来使所有音频源静音,并通过将其设置为= 1
来取消静音。
但是正如@derHugo指出的那样,这不是一个好主意,因为这样做会更多的工作/效率的降低,在这种情况下,完全静音AudioListener组件会更容易。
如果您只想静音一组特定声音,而并非全部静音,这将是一个可行的选择。当然,您需要保存在静音之前源所具有的音量,以便以后重新应用它,并且您需要直接引用所有这些AudioSource。 您可以这样做:
//Save the volume value and set it to 0 after
public Dictionary<AudioSource,float> MuteSourcesAndSaveVolumes(List<AudioSource> sourcesToMute)
{
var sourcesAndVolumes = new Dictionary<AudioSource, float>();
foreach (var source in sourcesToMute)
{
sourcesAndVolumes.Add(source, source.volume);
source.volume = 0;
}
return sourcesAndVolumes;
}
//Re-apply your saved volumes
public void UnMuteAllSources(Dictionary<AudioSource,float> sourcesAndVolumes)
{
foreach(var x in sourcesAndVolumes)
{
x.Key.volume = x.Value;
}
}
您当然可以始终在此处查看有关AudioSource组件的Unity文档: AudioSource Unity Docs
我希望这会有所帮助!
// Edit:我将解决方案切换为首先提出更好的解决方案,并添加了一些代码示例。
答案 1 :(得分:1)
我认为正确的方法是暂停音频系统。
public void ToggleSound()
{
toggle = !toggle;
AudioListener.pause = toggle;
}
Unity 文档 - https://docs.unity3d.com/ScriptReference/AudioListener-pause.html