2016-10-26 2 views
1

Я являюсь абсолютным новичком в единстве. Я работаю над пользовательским интерфейсом, который является простой формой входа. В котором у меня есть два Toggle для выбора пола i.e мужчина или женщина. То, что я делал, - это вызов метода, который проверяет, выбран ли самец, он удалит проверку у мужчины, когда будет нажат другой переключатель.Unity 5 не отвечает за код кода

Мое 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

Вы хотите переключатель, который может быть выбран только мужской или женский пол, но не оба? – Programmer

+0

есть. Это то, что я пытаюсь сделать. –

ответ

3

Вы работаете в бесконечный цикл с Toggle.

При переключении женского переключателя происходит событие onValueChanged. Я предполагаю, что ваша функция isFemale() связана с событием Toggle onValueChanged, поэтому будет вызываться isFemale().

Когда isFemale() называется, он будет делать male.isOn = false; вызывая isMale() функцию, которая будет вызвана, которая будет затем запустить female.isOn = false; вызывая isFemale() называться снова. Это вечно.

Событие onValueChanged никогда не должно срабатывать, когда isOn настроен из сценария. Это проблема.

Решение:

Вы ищете ToggleGroup.

.Create мужчина тумблер GameObject->UI->Переключить назовите его Мужчина тумблер.

.Create женщина тумблер GameObject->UI->Переключить назовите его Женский тумблер. Вы можете изменить текст меток позже.

. Создайте пустой объект GameObject.GameObject->Создать пустой. Переименуйте его в ToggleGroup.

Выберите созданный GameObject, перейдите компонент->ToggleGroup. Теперь у вас есть GameObject под названием ToggleGroup с ToggleGroup Компонент прилагается к нему.

.Select вашего Мужского тумблером, а затем перетащить ToggleGroup GameObject вGroupслота Самца ПЕРЕКЛЮчЕНИЯ в. Выберите Женский тумблером, а затем перетащить ToggleGroup GameObject вGroup слот Самки ПЕРЕКЛЮчЕНИЯ в

Выберите Женский тумблером, затем unckeckIs On флажка, чтобы убедиться, что только один (Мужчина toggle). Нажмите «Воспроизвести», и теперь можно выбрать только один переключатель.

enter image description here

+0

Спасибо, что указали это. я знал о «ToggleGroup», но понятия не имел, как его использовать. thnx за помощь. –

+0

Добро пожаловать! – Programmer

0

Я предполагаю, что две функции isMale и isFemale являются обработчиками событий Toggles. Согласно Unity Документов

тумблера имеет одно события под названием On измененного значения, которое реагирует , когда пользователь изменяет текущее значение

Таким образом, проблема заключается, что эти обработчики событий реагируют на изменение значения и не переключаться, поэтому ваш код вызывает бесконечный цикл. Он должен работать, читая их первым, чтобы убедиться, что это проверка и не отмените:

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; 
} 
Смежные вопросы