执行一段代码后,Unity 5无响应
我是团结的绝对初学者。 我一直在使用一个简单的登录表单的UI。 其中我有两个Toggle
用于选择性别,即男性或女性。 我一直在做的是调用一个方法来检查是否已经选择了男性它将在按下另一个切换时从男性中删除检查。
当我点击女性Toogle
时,我的Unity
冻结。 这是我的代码。
Toggle female; Toggle male; void Start(){ female = GameObject.Find ("toggle_female").GetComponent (); male = GameObject.Find ("toggle_male").GetComponent (); } public void isMale(){ if (female.isOn) female.isOn = false; male.isOn = true; } public void isFemale(){ if (male.isOn) male.isOn = false; female.isOn = true; }
你的Toggle
正在进入无限循环。
当女性切换发生变化时,会触发onValueChanged
事件。 我假设你的isFemale()
函数与Toggle onValueChanged
事件相关联,因此将调用isFemale()
。
当isFemale()
,它会执行male.isOn = false;
导致isMale()
函数,然后运行female.isOn = false;
导致再次调用isFemale()
。 这是永恒的。
当从脚本设置isOn
时,永远不应该触发onValueChanged
事件。 这就是问题。
方案 :
您正在寻找ToggleGroup 。
1.创建男性toggle GameObject – > UI – > Toggle然后将其命名为Male toggle 。
2.创建女性切换GameObject – > UI – > Toggle然后将其命名为Female toggle 。 您可以稍后更改标签文本。
3.创建一个空的GameObject。 GameObject – > Create Empty 。 将其重命名为ToggleGroup 。
选择新创建的GameObject,转到Component – > ToggleGroup 。 现在,你有一个名为ToggleGroup的ToggleGroup
,它附带了ToggleGroup
Component。
4.选择Male切换 ,然后将ToggleGroup GameObject拖动到Male切换的 Group
插槽中。 选择您的女性切换 ,然后将ToggleGroup GameObject拖到女性切换的 Group
插槽中
选择您的女性切换 ,然后取消选中“打开”复选框以确保默认情况下仅选择一个( 男性切换 )。 点击播放,现在,一次只能选择一个切换。
我猜两个函数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; }