[英]Pressing toggle button in toggle group calls more than one button
在我的统一游戏中,我有两个切换按钮,它们都在切换组中。 它们是标记为“打开”和“关闭”的按钮,用于打开和关闭游戏音乐。
我现在设置的方式使其行为非常奇怪。 如果音乐打开并且我单击“关闭”切换,则音乐关闭。 然后,如果我再次单击“开”,则会收到空对象引用错误,并且在再次单击“开”之前,复选标记不会出现在“开”切换按钮中,直到声音再次出现。 真正奇怪的是,当它重新打开时,当然会为音乐播放器创建一个游戏对象。 当我尝试再次将其关闭时,音乐将保持打开状态,并创建另一个音乐播放器游戏对象。 我不明白发生了什么。
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的同时在上方打开了“ On”按钮。在按下“ Off”时,它以0调用相同的函数。
14年9月2日
我仅使用一个切换按钮更新了代码。 切换按钮调用一种方法,该方法检查PlayerPrefs以查看是否应打开声音。 当我从一个场景移到其中具有切换按钮的场景时,仍然遇到一个问题。 当我这样做时,音乐就停止了。 出于某种原因,仅当按下切换按钮时才调用该方法。 有任何想法吗?
15年9月4日
在测试了Thaina告诉我的内容之后(上面的代码已更新),我将问题缩小到以下事实:如果我尝试将切换按钮设置为on,它将自动调用该切换器附带的函数。 我只想在按下该函数时调用它,而不是在设置其保存状态时调用它。 有没有办法做到这一点?
解
我最后只是让toggle.isOn调用了它试图访问的函数,并使用了一个静态布尔值仅在需要时才允许它访问某些代码。 Thaina的答案是让我足够远的地方达到了这一点,因此归功于Thaina。
我建议您使用GameObject.FindObjectOfType<MusicPlayer>()
。 因此,您可以确定它将在场景中获得MusicPlayer
我怀疑您的MusicPlayer对象实际上被命名为“ MusicPlayer”,而不是“ MusicPlayer”。 无论如何,以我的名字命名对象并不是一个好主意。 容易出错
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.