【发布时间】:2016-12-12 02:15:28
【问题描述】:
您好,我一直在研究这个问题,但找不到解决问题的最佳方法。
所以问题是我的背景音乐开始播放。我有两个按钮。“开”和“关”。我想使音乐静音,所以当我单击静音按钮时,它从“开”变为“关”,音乐停止。但是当我改变场景并返回时,它返回到带有文本“开”的按钮,但是音乐仍然停止。 所以我的问题只是如何保存更改的按钮而不默认返回? 这是我的脚本:
public GameObject on;
public GameObject off;
public string sound;
Soundtrack music;
static bool isMuted;
void Awake()
{
SoundCheck();
}
void Start()
{
music = FindObjectOfType<Soundtrack>();
}
public void Off()
{
if (isMuted == false)
{
on.gameObject.SetActive(false);
off.gameObject.SetActive(true);
music.s.Stop();
isMuted = true;
PlayerPrefs.SetString("Sound", "muted");
}
}
public void On()
{ if(isMuted==true)
{
on.gameObject.SetActive(true);
off.gameObject.SetActive(false);
music.s.Play();
isMuted = false;
PlayerPrefs.SetString("Sound", "enabled");
}
}
public void SoundCheck()
{
sound = PlayerPrefs.GetString("Sound");
if (sound == "enabled")
{
isMuted = false;
}
else if (sound == "muted")
{
isMuted = true;
}
}
}
【问题讨论】:
-
可能与手头的问题无关,但看起来你的 if 语句有一个大问题:你想在 if 语句中执行的多行代码应该用大括号括起来- 否则,只会有条件地执行 if 语句之后的第一行。例如,在
Off()中,将有条件执行的唯一行将是on.gameObject.SetActive(false);。其余的行将在每次调用该方法时执行,无论如何。我建议您养成在编写的每个 if 语句中都使用花括号的习惯。 -
哦,是的,我知道。当我将花括号放在函数中的整个代码上时,它也不起作用。现在我一定是在写这篇文章时无意中删除了它们。但是感谢您的关注:)。现在我将为未来的读者纠正它。
-
看起来像复制品。请看here