在我的统一的游戏我有都在拨动组在一起的两个切换按钮。它们是标记为“开”和“关”的按钮,用于打开和关闭游戏音乐。按下切换按钮调用多个按钮
我有它设置现在使得它的行为非常奇怪的方式。如果音乐开启,我点击“关闭”切换,音乐关闭。然后,如果我再次点击“开”,我会得到一个空对象引用错误,并且复选标记不会显示在“开”切换按钮上,直到我再次点击“开”,然后声音重新开启。真正奇怪的是,当它重新开启时,当然会为音乐播放器创建一个游戏对象。当我尝试再次关闭音乐时,音乐会保持不变,并创建第二个音乐播放器游戏对象。我不明白发生了什么事。
void Start()
{
checkWhatsOn();
}
void checkWhatsOn()
{
bool sound = PlayerPrefs.GetInt("Sound Playing", 1) == 1;
//if (sound) soundToggle.isOn = true; //THESE TWO STATEMENTS
//else soundToggle.isOn = false; //ARE CAUSING THE ISSUE!!
}
public void switchSound()
{
print (string.Format("In switch method sound is {0}", PlayerPrefs.GetInt("Sound Playing", 6)));
bool sound = PlayerPrefs.GetInt("Sound Playing", 1) == 1;
if (sound)
{
if (GameObject.FindObjectOfType<MusicPlayer>() != null)
{
PlayerPrefs.SetInt("Sound Playing", 0);
PlayerPrefs.Save();
GameObject.FindObjectOfType<MusicPlayer>().GetComponent<MusicPlayer>().Disable();
}
else print ("Sound wasn't changed, MusicPlayer needs to be null.");
}
else if (!sound)
{
PlayerPrefs.SetInt("Sound Playing", 1);
PlayerPrefs.Save();
if (GameObject.FindObjectOfType<MusicPlayer>() == null)
{
musicPlayer = Instantiate (Resources.Load ("MusicPlayer")) as GameObject;
GameObject.DontDestroyOnLoad(musicPlayer);
}
else print ("Sound wasn't changed, MusicPlayer shouldn't be null.");
}
print (string.Format("After switch method sound is {0}", PlayerPrefs.GetInt("Sound Playing", 7)));
}
在检查我有“打开”按钮,可拨打以上,同时通过在1功能。当“关”按下,它调用了0
9/2同样的功能/ 14
我一直只使用一个开关按钮更新我的代码。切换按钮调用一个方法来检查PlayerPrefs以查看声音是否应该打开。当我从一个场景切换到具有切换按钮的场景时,我仍然会遇到一个问题。当我这样做时,音乐停止。出于某种原因,调用只应在按下切换按钮时才会调用的方法。有任何想法吗?
15年9月4日
检测一下Thaina告诉我(以上代码更新)后,我缩小我的问题到事实,如果我尝试,它会自动设置为我的切换按钮调用附加到切换的功能。我只想在按下时调用函数,而不是在设置保存状态时调用。有没有办法做到这一点?
SOLUTION
我最终只是让toggle.isOn称,它正在试图访问的功能和使用的静态布尔只让它访问特定的代码时,我想它。 Thaina的回答是让我足够深入到这一点,所以信用Thaina。
你为什么使用两个切换按钮来实现单一目的? –
@rj所以这两个按钮可以用来调用两个不同的值,同时都在检查器中设置 – saboehnke
@rj我只用一个切换按钮更新了我的帖子。我已经完成了它的大部分工作,但您会在编辑中看到我的问题。谢谢。 – saboehnke