我是团结的绝对初学者。我一直在使用一个简单的登录表单的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;
}
答案 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 已启用复选框以确保只有一个(男性切换 )默认选中。点击播放,现在,一次只能选择一个切换。
答案 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;
}