Déclaration d'une variable GameObject dans Awake()

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
UnityNoobUser
Messages : 20
Inscription : 21 Fév 2021 14:54

Déclaration d'une variable GameObject dans Awake()

Message par UnityNoobUser » 28 Fév 2021 16:15

Salut,

Je suis dsl de devoir encore lancer un SOS mais cela m’énerve car je bloque sur des choses qui devraient être simples mais sur lequel je passe des heures sans résoudre le prb...c'est vraiment compliqué pour pas grand chose le c# ^^

le contexte: je souhaite activer ou désactiver l'affichage d'un cadre avec du texte qui est créé dans mon canvas lors du passage du pointeur de la souris sur un GameObject de la scène (ce GameObject dans mon canevas, de type Image, se nomme CadreInfosPlanet et possède des enfants de type Text). jusque la pas de prb avec
CadreInfosPlanet.gameObject.SetActive(true);
et lorsque la variable public est renseignée manuellement dans l'inspector.

mais je souhaiterai ne pas devoir renseigner tous les game object dont j'ai besoin dans l'inspector manuellement mais le faire en dur dans le script et la ça coince...

si je passe cette variable de type GameObject en "private" je dois donc la définir dans Awake()
CadreInfosPlanet = GameObject.FindGameObjectWithTag("CadreInfosPlanet");
mais quand je lance il m'informe que : "Object reference not set to an instance of an object"

j'ai essaye des trucs trouvé a droite ou a gauche comme https://forum.unity.com/threads/how-to- ... le.475990/ mais cela ne fonctionne pas

je vais rencontrer le meme prb après avec les variables de type Text...

quel code renseigne unity lorsque l'on selectionne manuellement l'object dans l'inspector ?

je sais pas si ma demande est claire mais bon ;)

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Déclaration d'une variable GameObject dans Awake()

Message par Max » 28 Fév 2021 17:06

Bonjour,
UnityNoobUser a écrit :
28 Fév 2021 16:15
c'est vraiment compliqué pour pas grand chose le c# ^^
c'est plus lié à la compréhension d'Unity qu'au C# lui même, qui n'y est pour rien ;)
UnityNoobUser a écrit :
28 Fév 2021 16:15
CadreInfosPlanet = GameObject.FindGameObjectWithTag("CadreInfosPlanet");
mais quand je lance il m'informe que : "Object reference not set to an instance of an object"
Cela devrait pourtant fonctionner. Si ton objet a le bon tag, définis par tes soin. Et si il est le seul, car si plusieurs objets possèdent le même tag, il te servira le premier trouvé, et donc pas nécessairement celui prévu.
Après tu peux faire une recherche par nom d'objet, avec GameObject.Find();.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Déclaration d'une variable GameObject dans Awake()

Message par jmhoubre » 28 Fév 2021 20:53

Bonsoir,

Elle est déclarée comme quoi ta variable CadreInfosPlanet ?

UnityNoobUser
Messages : 20
Inscription : 21 Fév 2021 14:54

Re: Déclaration d'une variable GameObject dans Awake()

Message par UnityNoobUser » 28 Fév 2021 21:31

merci pour votre soutient psycologique ^^

elle est déclarée en tant que "GameObject"
private GameObject CadreInfosPlanet;
mais cela maintenant fonctionne après avoir redémarré unity ! (sans modification du code !)

du coup jme dit chouettee, je déclare mes variables Text et j'ajoute mes Text dans Awake() pour faire la meme chose qu'avec "CadreInfosPlanet":

Code : Tout sélectionner

    
    private GameObject CadreInfosPlanet;
    private Text NameValue;
    private Text OwnerValue;
    private Text UnitsNUmberValue;
    private Text RessourcesValue;
    private Text DefenseValue;

Code : Tout sélectionner

        void Awake()
    {
        ownerMaterial = Resources.Load<Material>("Materiaux/Force Field/Force Field"); 
 
        CadreInfosPlanet = GameObject.FindGameObjectWithTag("CadreInfosPlanet");
        NameValue = GameObject.FindGameObjectWithTag("NameValue").GetComponent<Text>();
        OwnerValue = GameObject.Find("OwnerValue").GetComponent<Text>();
        UnitsNUmberValue = GameObject.Find("UnitsNUmberValue").GetComponent<Text>();
        RessourcesValue = GameObject.Find("RessourcesValue").GetComponent<Text>();
        DefenseValue = GameObject.Find("DefenseValue").GetComponent<Text>();
    }
et la devinez quoi :( : "NullReferenceException: Object reference not set to an instance of an object pour ma ligne qui correspond à "NameValue")

essaie avec recherche du tag ou par le nom = echec. est ce que le fait que mes objects text soient enfant de CadreInfosPlanet peut poser prb ? ( car dans le lien donné par max sur la doc unity il y a des exemple avec des objets enfant .. j'ai également essayé mais sans succès aussi :-/

UnityNoobUser
Messages : 20
Inscription : 21 Fév 2021 14:54

Re: Déclaration d'une variable GameObject dans Awake()

Message par UnityNoobUser » 28 Fév 2021 22:27

bon en fait le gameobject "CadreInfosPlanet" était desactivé via l'inspector... en l'activant plus de message d'erreur. je pensais pas que si celui était desactivé on ne pouvait utiliser les gameobjects enfant...

bon je suis plus doué pour jouer que pour concevoir :pleur4: . merci encore les gars pour avoir pris la peine d'essayer de m'aider.

je crois que je brule les étapes je vais commencer par me former en suivant des cours plutôt que 'd'apprendre en essayant de créer et en suivant des tutos youtube ;)

au passage si vous avez des conseils pour trouver une formation pas trop chere et de bonne qualité..

merci encore

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Déclaration d'une variable GameObject dans Awake()

Message par jmhoubre » 28 Fév 2021 23:19

Va sur ce sujet qui liste plein de chaines YouTube intéressantes.
Démarre par le série Apprendre le C# puis Créer un jeu en 2D facilement avec Unity.

Je te déconseille les cours payants. Payer pour voir des aneries ou pire, je n'en vois pas l'intérêt.

Répondre

Revenir vers « Scripting »