Unity 5 ne répond pas après l’exécution d’un morceau de code

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.

entrez la description de l'image ici

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; }