Difference de reference entre Unity 2018 et version Actuelle ?

Questions à propos du GUI, y compris la partie script.
lmo92
Messages : 35
Inscription : 09 Sep 2023 11:10

Difference de reference entre Unity 2018 et version Actuelle ?

Message par lmo92 » 20 Sep 2023 09:56

Bonjour a tous,
Je suis un tutoriel sur la creation d'une app qui est fait sur une ancienne version de unity ( 2018 ) ici : etape3 - efface input field - https://www.youtube.com/watch?v=7LEeKMg ... oV&index=3
le gamebOject Inputfield simple est remplacé desormais par "InputField text Mesh pro"
Pour moi , les elements dans le script sont bien instanciés et référencés. Mais lors du run, lorsque je click donc sur le bouton j'ai "NullReferenceException: Object Reference not set to an instance of an object ButtonControl.myclearText() dans ButtonControl.cs
Voici la Hierarchy
Image Image
et le code , pour moi il n y a pas d incoherences avec les noms ( et majuscule, minuscules). Est ce qu il y a une finesse avec Text MeshPro?
Merci

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ButtonControl : MonoBehaviour
{
    public GameObject theText;
    public void myClearText()
    {
        theText.GetComponent<InputField>().text = "toto";
    }

}

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

Re: Difference de reference entre Unity 2018 et version Actuelle ?

Message par boubouk50 » 20 Sep 2023 10:11

theText est le GameObject AppControls (qui possède le script ButtonControl)
Sur ce gameObject, tu vas chercher le Component InputField.
  • S'il le trouve, tu modifies son texte.
  • S'il ne le trouve pas, tu modifies le texte de rien et cela génère une erreur.
Donc il ne le trouve pas.
Pourquoi, parce que tu requiers un InputField alors que tu as un InputField Text Mesh Pro, ce qui n'est pas le même Component.
Je ne l'ai jamais utilisé, mais je suppose qu'il faut que tu changes <InputField>().text par <TMPro.TMP_InputField>().m_Text.

Aussi, il faut éviter d'accéder à des variables sans savoir si elles sont accessibles. Mieux vaut séparer.

Code : Tout sélectionner

public void myClearText()
{
	// Tester si le gameObject est présent
	if (theText != null)
	{
		// Récupérer le Component
		InputField iField = theText.GetComponent<InputField>();
		// Tester si le Component est présent
		if (iField  != null)
			// Affecter une variable accessible
			iField .text = "toto";
		else
			// Indiquer la raison du problème
			Debug.LogWarning ("La variable theText n'a pas de Component InputField");
	}
	else
		// Indiquer la raison du problème
		Debug.LogWarning ("La variable theText n'est pas affectée");
}
"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

lmo92
Messages : 35
Inscription : 09 Sep 2023 11:10

Re: Difference de reference entre Unity 2018 et version Actuelle ?

Message par lmo92 » 20 Sep 2023 11:12

un grand merci, c etait bien le nom du composant qui n 'allait pas. Je me doutais que le probleme tournait autour de cela et Je comprends le principe desormais.
Merci pour le code propre egalement ( j en suis au tests et a l apprentissage / re-apprentissage pour le moment )
Merci

Répondre

Revenir vers « L'interface GUI »