[Resolu][DB] Récuperer un text d'un GUI

Questions à propos du GUI, y compris la partie script.
rewopro
Messages : 12
Inscription : 15 Fév 2017 09:23

[Resolu][DB] Récuperer un text d'un GUI

Message par rewopro » 20 Fév 2017 01:18

Bonjour , J'aimerais créer un petit programme qui lorsque l'on rentre un code et que l'on clique sur un bouton , on passe au niveau suivant . Si et seulement si le code est bon .

J'utilise des GUI pour cela . J'utilise un GUI InputField et un Button .

J'ai déjà réussi à entrer la condition que : Si on clique sur le "Button" on passe au niveau suivant , mais je ne sais pas comment récupérer le text du "InputField" pour signaler que :

Si on rentre le text : "Débloque" et que on appuie sur le bouton alors on passe au niveau suivant .

Je me doute bien que tout est une histoire de variable et de condition . Qu'il faut faire appel au InputField pour récuperer le donner et soumettre une condition mais je ne vois pas comment le faire .
Voici le code déjà existant sur le "Button" :

Code : Tout sélectionner

#pragma strict

var Levelname : String = "Name Next Level " ;



function Update () {
      

         if ( Input.GetMouseButtonDown(0)) {
            SceneManagement.SceneManager.LoadScene(Levelname) ;

      }
 }
Dernière édition par rewopro le 21 Fév 2017 14:00, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB] Récuperer un text d'un GUI

Message par boubouk50 » 20 Fév 2017 10:41

Input.GetMouseButtonDown(0) ne récupère pas le clic sur un bouton mais un clic souris (donc n'importe où)

La doc te montre comment marche un inputField dans un code. La variable à utiliser est text, l'événement associé est OnSubmit (). Ensuite, il te suffit de comparer le texte dans text et la soluce: comparaison de string.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

rewopro
Messages : 12
Inscription : 15 Fév 2017 09:23

Re: [DB] Récuperer un text d'un GUI

Message par rewopro » 20 Fév 2017 15:44

Bonjour , j'ai réussi à associer mon texte à mon clique de souris . Mais effectivement je change de niveau lorsque je clique tout simplement .
et dans la doc je ne trouve pas de fonction qui assignerai le clique seulement sur le bouton .

Code : Tout sélectionner

#pragma strict

var Levelname : String = "Name Next Level " ;
var Code : UI.InputField ;


function Update () {


         if ((Code.text == "debloque")&&( Input.GetMouseButtonDown(0))) {
             SceneManagement.SceneManager.LoadScene(Levelname) ;
            }
         else if ((Code.text != "debloque")&&( Input.GetMouseButtonDown(0))) {
             Debug.Log("Taper le bon code");
      }
 }

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB] Récuperer un text d'un GUI

Message par boubouk50 » 20 Fév 2017 15:55

rewopro a écrit :et dans la doc je ne trouve pas de fonction qui assignerai le clique seulement sur le bouton .
Mais où allez vous chercher vos informations??? :roll:

DOCUMENTATION: Button -> OnClick (), OnPointerUp (), OnMouseDown () (si le script est sur le bouton)

C'est écrit noir sur blanc avec l'exemple d'utilisation.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

rewopro
Messages : 12
Inscription : 15 Fév 2017 09:23

Re: [DB] Récuperer un text d'un GUI

Message par rewopro » 20 Fév 2017 16:45

Si j'avais pourtant vu celle si dans la doc mais je ne les avait pas relever puisque après avoir vu l'utilisation cela me semblait pas en accord avec mon problème . Je me suis trompé ! :rouge:

Je mettais mes conditions dans la fonction Update et je ne comprend pas l'utilisation d'autre fonction . Voici mon code :

Code : Tout sélectionner

#pragma strict

var Levelname : String = "Name Next Level " ;
var Code : UI.InputField ;


function OnMouseDow () {


         if ((Code.text == "debloque")&&(OnMouseDown)) {
             SceneManagement.SceneManager.LoadScene(Levelname) ;
            }
         else if ((Code.text != "debloque")&&(OnMouseDown)) {
             Debug.Log("Taper le bon code");
      }
 }
j'avais déjà testé ça , mais je ne vois pas ensuite comment implanter les conditions . l'erreur ici est" Unknown identifier : OnMouseDown"

Et si je ne le met pas dans mes conditions le code ne fonctionne pas non plus .

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB] Récuperer un text d'un GUI

Message par boubouk50 » 20 Fév 2017 17:52

Tu confonds variable et fonction. Et tu n'as pas suivi l'exemple de la documentation.

OnMouseDown () est une fonction appelée lorsque l'utilisateur clique sur l'élément qui possède le script.
Ainsi, pas besoin de tester OnMouseDown (ce qui n'est pas possible d'ailleurs, ce n'est pas une variable) puisque la fonction même est la condition.

Code : Tout sélectionner

#pragma strict

var levelname : String = "Name Next Level " ;	//Les variables commencent par une minuscule!
var code : UI.InputField ;						//Les variables commencent par une minuscule!

function OnMouseDown () {	//Attention! Faute de frappe!

         if (code.text == "debloque") {	//faisable mais peut-être essayer if (code.tex.localeCompare ("debloque") == 0)
             SceneManagement.SceneManager.LoadScene(levelname) ;
          }
         else  { //Dans tout autre cas, c'est faux, pas besoin de refaire une condition
             Debug.Log("Taper le bon code");
      }
 }
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

rewopro
Messages : 12
Inscription : 15 Fév 2017 09:23

Re: [DB] Récuperer un text d'un GUI

Message par rewopro » 20 Fév 2017 18:57

Rien ne fonctionne , même avec le "localeCompare"

j'ai pourtant affecté le nom de niveau dans sa case et j'ai affecté le 'InputField" dans sa case .

Code : Tout sélectionner

#pragma strict

var levelname : String = "Name Next Level " ;
var code : UI.InputField ;


function OnMouseDown () {


         if (code.text == "debloque") {
             SceneManagement.SceneManager.LoadScene(levelname) ;
         }
         else {
             Debug.Log("Taper le bon code");
         }
}
Rien ne se passe , que je tape le code ou pas . rien ne s'affiche , et le niveau ne change pas . J'ai tester et le nom du niveau est bien entré et le texte est bien lié pourtant . La je vois pas !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB] Récuperer un text d'un GUI

Message par boubouk50 » 20 Fév 2017 19:05

Ton script est sur ton bouton?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

rewopro
Messages : 12
Inscription : 15 Fév 2017 09:23

Re: [DB] Récuperer un text d'un GUI

Message par rewopro » 20 Fév 2017 19:36

Oui oui il est affecté à "Button"

Quand je renomme la fonction OnMouseDown et que je met la fonction Update . tout fonctionne bien sauf qu'on a pas besoin de cliquer ... :p.

le message "Taper le bon code" s'affiche en boucle jusqu'à ce que j'écrive le bon code et hop ça passe . Donc les liens se font bien à travers le bouton mais le bouton ne sert à rien puisque le fonction update fais tout .

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB] Récuperer un text d'un GUI

Message par boubouk50 » 21 Fév 2017 10:13

C'est normal, il ne faut pas utiliser l'Update () sinon le test de clic se fait à chaque frame.
Bon le souci est surement dû au bouton, qui est un élément d'UI particulier puisqu'il gère ses propres événements de clics.

Je t'avais donné 3 possibilités parmi les d'autres et on est parti sur la mauvaise, j'aurai dû vérifier.

Du coup question: Ne peux-tu pas affecter la fonction dans le OnClick event du gameObject dans l'Inspector? Ou tu dois tout faire par code?

Sinon:

Code : Tout sélectionner

#pragma strict

var levelname : String = "Name Next Level " ;
var code : UI.InputField ;

function Start() {
	var btn: Button = this.GetComponent.<Button> ();
	btn.onClick.AddListener (TaskOnClick);
}

function TaskOnClick() {
	if (code.text == "debloque") {
		SceneManagement.SceneManager.LoadScene(levelname) ;
	}
	else {
		Debug.Log("Taper le bon code");
	}
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « L'interface GUI »