Page 1 sur 1

[Résolu]Problème de comparaison de réponses dans un formulaire Unity (InputFields et Prefabs))

Publié : 31 Oct 2023 12:18
par 1300vrtical
Bonjour à tous,

Je travaille actuellement sur un projet dans Unity où je mets en place un système de formulaire pour que les joueurs puissent entrer des réponses textuelles. Cependant, je rencontre un problème lors de la comparaison des réponses entrées par les joueurs avec les réponses possibles dans mon jeu.

J'utilise TextMeshProUGUI pour capturer les réponses du joueur, et le texte est stocké dans un objet instance(clone). Je récupère le texte entré par le joueur à l'aide du code suivant :

Code : Tout sélectionner

	public void CreateValidate_instance()
	{
		for (int i = 0; i < currentMessageGroup.validation.Length; i++)
		{
			GameObject GOvalidations_i = Instantiate(GOvalidations, ReponceContent); 
			GOvalidations_i.transform.SetSiblingIndex(0);
			// renplissage des textes
			ValBoxElement valBoxElement = GOvalidations_i.GetComponent<ValBoxElement>();
			valBoxElement.presText = currentMessageGroup.validation[i].PresText;
			
			// je recherche le bouton de validation et lui ajoute une fonction sur bouton 
			Button buttonVal = GOvalidations_i.transform.Find("Validationmel").GetComponent<Button>();
			int index = i;
			buttonVal.onClick.AddListener(() => SetNextGroupVal(index));
		}
	}
puis dans :

Code : Tout sélectionner

	public void SetNextGroupVal(int indexVal)
	{
		// Récupérez le texte de la réponse du joueur depuis le formulaire de linstance creer juste avant
			GameObject TextJoueur = GameObject.Find("TextJ");
			Debug.Log("TextJ " + TextJoueur);
			string reponseJoueur = TextJoueur.GetComponent<TextMeshProUGUI>().text;
			Debug.Log("la réponse du joueur : "+reponseJoueur);
			Debug.Log("Longueur du texte de réponse du joueur : " + reponseJoueur.Length);

		if (currentMessageGroup != null && indexVal >= 0 && indexVal < currentMessageGroup.validation.Length)
		{
			bool reponseCorrecte = false;

			for (int j = 0; j < currentMessageGroup.validation[indexVal].BonneProposition.Length; j++)
			{
				string bonneProposition = currentMessageGroup.validation[indexVal].BonneProposition[j];

				if (reponseJoueur == bonneProposition)
				{
					reponseCorrecte = true;
					break;
				}
			}

			if (reponseCorrecte)
			{
				// Réponse correcte, affichez un message de succès
				GameObject newAnswerContent = Instantiate(answerContentPrefab, messagesContent);
				newAnswerContent.transform.SetSiblingIndex(0);
				newAnswerContent.GetComponentInChildren<Text>().text = currentMessageGroup.validation[indexVal].reponce;

				currentMessageGroup = currentMessageGroup.validation[indexVal].nextGroupVal;

				GOvalidations.gameObject.SetActive(false);
				StartCoroutine(SendingMessages());
			}
			else
			{
				// Réponse incorrecte, affiche un des message d'échec
				// Ici, vous pouvez gérer la réponse incorrecte comme vous le souhaitez
				Debug.Log("Réponse incorrecte.");
			}
		}
		else
		{
			Debug.LogError("IndexVal hors des limites du tableau : " + indexVal);
		}
	}

J'ai vérifié que l'objet TextJoueur est correctement trouvé et que le texte entré par le joueur est stocké dans reponseJoueur.
e problème survient lorsque j'essaie de comparer reponseJoueur avec les réponses possibles dans mon jeu. J'ai mis en place une boucle pour parcourir les réponses possibles, mais la comparaison ne fonctionne pas comme prévu. J'obtiens souvent une réponse incorrecte, même lorsque le texte entré par le joueur correspond à l'une des réponses possibles.
mon Debug.Log de la string reponseJoueur et toujours vide.
Y a-t-il quelque chose que je rate dans le button de validation? Peut-être que cela a quelque chose a faire avec onEndEdit.AddListener qui semble plus approprier ?Je tourne en rond et peut etre qu'un regard exterieur pouras m'aider a y voir plus claire :amen:
Si quelqu'un a déjà rencontré un problème similaire ou a des conseils pour résoudre cette situation, je serais reconnaissant pour toute aide que vous pourriez fournir.

Merci d'avance pour votre assistance.

Cordialement,
1300vrtical :merci:

Re: Problème de comparaison de réponses dans un formulaire Unity (InputFields et Prefabs))

Publié : 31 Oct 2023 16:17
par Max
Hello,

je n'ai pas regardé en profondeur ton code, mais il semble que tu effectues les comparaisons sur tes chaines (string)
en passant par l'opérateur d'égalité (==). Ça il faut éviter.
Il existe des fonctions dédiées au traitement des string. Par exemple dans ton cas regarde du coté de la méthode String.Compare, cela devrait déjà établir une base plus seine pour ce que tu cherches à faire.

Re: Problème de comparaison de réponses dans un formulaire Unity (InputFields et Prefabs))

Publié : 31 Oct 2023 21:46
par 1300vrtical
Bonjour,

Je tiens à vous remercier pour votre précieux conseil concernant l'utilisation de String.Compare pour comparer les chaînes de caractères. Je suis sur le coups :cote:
Cependant, j'ai toujours un défi que je n'arrive pas à résoudre. Mon problème principal réside dans le fait que je n'arrive pas à récupérer correctement les réponses écrite par le joueur depuis l'objet "TextJ" pour le comparer au bonnes réponses . J'ai tenté plusieurs approches pour obtenir les réponses entrées par le joueur, mais je rencontre des difficultés à chaque tentative. :aille:

L'objet "TextJ" semble être correctement trouvé par le debug.log, mais la récupération du texte entré par le joueur pose problème. :rouge: J'ai essayé d'utiliser TextJ.GetComponent<TextMeshProUGUI>().text pour obtenir le texte, mais cela ne semble pas fonctionner comme prévu. Je dois sûrement avoir un problème de logique que je ne comprends pas.
Merci pour toutes aide supplémentaire ou des suggestions sur la manière de récupérer correctement les réponses du joueur depuis un objet "TextJ" au moment de la validation dans Unity.
Merci d'avance pour votre soutien.

1300

Re: Problème de comparaison de réponses dans un formulaire Unity (InputFields et Prefabs))

Publié : 01 Nov 2023 10:45
par Max
Bonjour,

en fait je dois t'avouer que je ne comprends pas comment tu captes le texte entré par l'utilisateur, niveau interface UI ?
Tu évoques TextMeshProUGUI , mais cette classe sert essentiellement à l'affichage et non à effectuer des entrés (contrairement à TMP_InputField par exemple)

Re: Problème de comparaison de réponses dans un formulaire Unity (InputFields et Prefabs))

Publié : 01 Nov 2023 18:21
par 1300vrtical
J'ai récemment modifié le type de variable de mon champ de texte de TextMeshPro (TextMeshProUGUI) en InputField_TMP :oops: je suis confus, car je le savais déjà. Cependant, malgré mes efforts, je n'arrive toujours pas à faire passer le texte entré par l'utilisateur vers ma fonction SetNextGroupVal :aille2: . Voici le code que j'ai actuellement :

Code : Tout sélectionner

GameObject TextJoueur = GameObject.Find("InputField (TMP)");
TMP_InputField TextJoueur_Input = TextJoueur.GetComponent<TMP_InputField>();
TextJoueur_Input.onEndEdit.AddListener((string reponse) => SetNextGroupVal(index, TextJoueur_Input.text));
Mon problème principal est que je ne comprends pas pourquoi cette approche ne fonctionne pas comme prévu. Je ne reçois aucune erreur, mais je n'arrive pas à obtenir le texte entré par l'utilisateur dans mon prefab pour la fonction de comparaison SetNextGroupVal. :triste1:
Merci d'avance pour votre aide. :merci:

Re: Problème de comparaison de réponses dans un formulaire Unity (InputFields et Prefabs))

Publié : 03 Nov 2023 15:37
par 1300vrtical
Bonjour,
J'ai trouvé mon erreur car j'utilisais un inputField (TMP) trop général alors que j'aurais dû le renommer de manière plus précise. :mdr1:
Merci pour l'aide apportée Max

Re: [Résolu]Problème de comparaison de réponses dans un formulaire Unity (InputFields et Prefabs))

Publié : 03 Nov 2023 18:03
par Max
Salut, et désolé pour cette réponses tardive :triste1:
Mais je vois que tu sembles avoir trouvé la solution de ton coté, donc c'est parfait ;)