2016-12-12 74 views
0

嗨,我一直在研究很多关于这个问题,但我找不到我的问题的最佳解决方案。如何使用保存静音/取消静音按钮?

所以问题是我的背景音乐开始播放。我有两个按钮。“开”和“关”。我想静音音乐,所以当我点击我的静音按钮时,它从“开”变为“关”,音乐停止。但是当我改变场景并返回时,它返回到带有文字“开”的按钮,但是音乐仍然停止。 所以我的问题只是如何保存更改的按钮,而不会默认返回? 这里是我的脚本:

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; 
    } 
} 

}

+0

也许与手头上的问题无关,但它看起来像你的if语句有一个大问题:你想在if语句中执行的多行代码应该用大括号括起来 - 否则, if语句之后的第一行将被有条件地执行。例如,在'Off()'中,有条件执行的唯一行将是'on.gameObject.SetActive(false);'。无论如何,每当调用方法时,其余的行都会执行。我建议你养成用你写的每个陈述书写花括号的习惯。 – Serlite

+0

哦,是的,我知道这一点。当我将大括号放在函数的整个代码中时,它不起作用。现在,我必须在写这篇文章时无意中删除了它们。但是请多加关注:)。现在我会为未来的读者更正它。 –

+0

看起来像重复。请看[这里](http://stackoverflow.com/a/41073496/3785314) – Programmer

回答

0

很容易。首先,在PlayerPrefs而不是string中保存bool类型会更好。 但解决您的问题你必须这样做的添加是

public void SoundCheck() { sound = PlayerPrefs.GetString("Sound"); if (sound == "enabled") { isMuted = false; } else if (sound == "muted") { isMuted = true; } on.gameObject.SetActive(isMuted); off.gameObject.SetActive(!isMuted); }

+0

“开”和“关”功能如何? –

+0

我应该改变他们的任何东西吗? –

+0

如果您想将PlayerPrefs类型从'string'更改为'bool',那么您将不得不对其进行修改,而不是那样。 – zhekazheka

0

您需要更改启动功能还没醒声检测()调用! 当你回到场景时,Start()将会调用,但是不会唤醒。

BTW:

  1. 应该布尔为节省PlayerPrefs,
  2. 想想一个按钮,改变精灵雪碧在和雪碧关才能更好。