Je suis un débutant absolu dans l’unité. Je travaille sur une interface utilisateur qui est un simple formulaire de connexion. Dans lequel j’ai deux Toggle
pour sélectionner le sexe, c.-à-d. Homme ou femme. Ce que je faisais, c’est que le fait d’appeler une méthode qui vérifie si un homme est déjà sélectionné supprimera la vérification de l’homme lorsque l’autre touche est activée.
Mon Unity
fige lorsque je clique sur le Toogle
féminin. voici mon code.
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; }
Vous courez dans une boucle infinie avec votre Toggle
.
Lorsque la bascule femelle change, l’événement onValueChanged
est déclenché. Je suppose que votre fonction isFemale()
est liée à l’événement Toggle onValueChanged
, donc isFemale()
sera appelé.
Quand isFemale()
est appelée, elle fera male.isOn = false;
provoquant l’ isMale()
fonction isMale()
qui exécutera ensuite female.isOn = false;
provoquant un isFemale()
. C’est éternel.
L’événement onValueChanged
ne doit jamais être déclenché lorsque isOn
est défini à partir d’un script. C’est le problème.
Solution :
Vous recherchez le ToggleGroup .
1.Créez un homme à bascule GameObject -> UI -> Basculez puis nommez-le Homme à bascule .
2 .Créer une bascule féminine GameObject -> UI -> Basculer puis nommer une bascule féminine . Vous pouvez modifier le texte de l’étiquette ultérieurement.
3. Créez un GameObject vide. GameObject -> Créer vide . Renommez-le ToggleGroup .
Sélectionnez le GameObject nouvellement créé, allez à Composant -> ToggleGroup . Maintenant, vous avez GameObject appelé ToggleGroup auquel est ToggleGroup
composant ToggleGroup
.
4. Sélectionnez votre bascule Homme , puis faites glisser l’object de jeu ToggleGroup dans l’ emplacement du Group
de bascule Male . Sélectionnez votre bascule Femme , puis faites glisser l’object de jeu ToggleGroup dans l’ emplacement du Group
de bascule Femme
Cochez la case Femme , puis cochez la case Activer pour vous assurer qu’un seul ( homme ) est sélectionné par défaut. Cliquez sur Lecture et maintenant, une seule bascule peut être sélectionnée à la fois.
Je suppose que les deux fonctions isMale et isFemale sont les gestionnaires d’événements de Toggles. Selon les documents Unity:
La bascule a un seul événement appelé On Value Changed qui répond lorsque l’utilisateur modifie la valeur actuelle
Le problème est donc que ces gestionnaires d’événements répondent au changement de valeur et ne basculent pas en cours de vérification. Votre code provoque donc une boucle infinie. Cela devrait fonctionner en les lisant d’abord pour s’assurer que c’est une vérification et non décocher:
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; }