我有一个功能(附加到按钮按下)应该启用/禁用舞台上的所有声音(嗯,在PlayerPrefs中保存声音的存在/不存在)。她绝对随机工作,她想要 - only mute = true有效,她想要 - only mute = false(这会在脚本更新时改变)。我不明白为什么。
功能:(MusicBtn - 声音按钮,只需要改变图标)
// using System.Linq
public void OnOffMusic()
{
if (PlayerPrefs.GetString("Music") == "off")
{
PlayerPrefs.SetString("Music", "on");
MusicBtn.image.sprite = MusicOn;
}
else
{
PlayerPrefs.SetString("Music", "off");
MusicBtn.image.sprite = MusicOff;
}
FindObjectsOfType<AudioSource>().All(audio => audio.mute != audio.mute);
}
按钮:
!!!只有5个警告:
- 我可以在运行时在编辑器中自由地将静音值更改为所需的值,一切正常。
- 我试过明确地写mute = false和mute = true 。
- 我正在调试并且FindObjectsOfType正确找到所有音频
- 我尝试使用互联网上的示例等待(扩展类)
- 在Start()我检查 PlayerPrefs "Music" 中是否存在
扩展:
public static IEnumerator Mute(this AudioSource audioSource)
{
yield return new WaitForSeconds(0.01f);
audioSource.mute = true;
}
public static IEnumerator Unmute(this AudioSource audioSource)
{
yield return new WaitForSeconds(0.01f);
audioSource.mute = false;
}
开始():
if (PlayerPrefs.HasKey("Music"))
{
if (PlayerPrefs.GetString("Music") == "off")
{
FindObjectsOfType<AudioSource>().All(audio => audio.mute = true);
MusicBtn.image.sprite = MusicOn;
}
}
else
{
PlayerPrefs.SetString("Music", "on");
}
该怎么办???
您使用迭代器作为返回值编写了一个扩展方法:
因此,在调用audioSource.Mute()时,您不会启动协程,而只是返回一个迭代器,您必须自己“移动”它,以便代码执行流程到达您所珍视的
解决方案是将audioSource.Mute()替换为
原则上,如果一切都已经写好了,而且我说的是显而易见的事情,那么我要求你发送更多数据。
我还建议您检查数组
FindObjectsOfType<AudioSource>()
中是否存在元素。