执行一段代码后,Unity 5无响应

时间:2016-10-26 08:56:58

标签: c# unity3d unity5

我是团结的绝对初学者。我一直在使用一个简单的登录表单的UI。其中我有两个Toggle用于选择性别,即男性或女性。我一直在做的是调用一个方法来检查是否已经选择了男性,当按下另一个切换时,它将从男性中删除支票。

当我点击女性Unity时,我的Toogle会冻结。这是我的代码。

Toggle female;
Toggle male;
void Start(){
    female = GameObject.Find ("toggle_female").GetComponent<Toggle> ();
     male = GameObject.Find ("toggle_male").GetComponent<Toggle> ();
}

 public void isMale(){
    if (female.isOn)
        female.isOn = false;

    male.isOn = true;

}

public void isFemale(){
    if (male.isOn)
        male.isOn = false;

    female.isOn = true;
}

2 个答案:

答案 0 :(得分:4)

您正在与Toggle进行无限循环。

当女性切换发生变化时,会触发onValueChanged事件。我假设您的isFemale()函数与切换onValueChanged事件相关联,因此将调用isFemale()

调用isFemale()时,会导致male.isOn = false; isMale()函数将被调用,然后运行female.isOn = false;,导致isFemale()再次被调用。这是永恒的。

从脚本设置isOn时,永远不应触发onValueChanged事件。这就是问题所在。

<强>解决方案

您正在寻找ToggleGroup

1 。创建男性切换 GameObject - &gt; 用户界面 - &gt; 切换,然后将其命名为男性切换

2 。创建女性切换 GameObject - &gt; 用户界面 - &gt; 切换,然后将其命名为女性切换。您可以稍后更改标签文本。

3 。创建一个空的GameObject。 GameObject - &gt; 创建空。 将其重命名为 ToggleGroup

选择新创建的GameObject,转到组件 - &gt; ToggleGroup 。现在,您将GameObject称为 ToggleGroup ,并附加了ToggleGroup组件。

4 。选择男性切换,然后将 ToggleGroup GameObject拖到男性切换Group位置。选择女性切换,然后将 ToggleGroup GameObject拖到女性切换 Group广告位

选择女性切换,然后 unckeck 已启用复选框以确保只有一个(男性切换 )默认选中。点击播放,现在,一次只能选择一个切换。

enter image description here

答案 1 :(得分:1)

我猜两个函数isMale和isFemale是Toggles的事件处理程序。根据Unity文档:

  

Toggle有一个名为On Value Changed的事件响应   当用户更改当前值

所以问题是这些事件处理程序响应值更改而不是切换被检查,因此您的代码会导致无限循环。它应该首先阅读它们以确保它是一个检查而不是取消选中:

 public void isMale(){
    if (!male.isOn) return;

    if (female.isOn)
        female.isOn = false;

    male.isOn = true;

}

public void isFemale(){
    if (!female.isOn) return;

    if (male.isOn)
        male.isOn = false;

    female.isOn = true;
}