[DB][AL] GameObject child impossible à trouver

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Kobal
Messages : 7
Inscription : 12 Mars 2019 11:15

[DB][AL] GameObject child impossible à trouver

Message par Kobal » 17 Mai 2020 20:17

Bonjour à tous,

Depuis quelques jours je bloque sur un problème dans mon programme :

Tout d'abord je vous resitue : j'ai enregistré des data dans un fichier Json et dans la fonction ci dessous j’instancie des GameObject à partir de ce fichier. Ces GameObject sont créés à partir d'un préfab composé d'un GameObject ayant une dizaine de child.

La première boucle instancie une série de GameObject (sans problème)
La seconde boucle (dont je n'ai pas mis la fin), utilise les GameObject précédemment créés en allant chercher un child de ceux ci. Et c'est là que les athéniens s'atteignirent :)

Code : Tout sélectionner

	IEnumerator ShowLoadDialogCoroutine()
	{
		yield return FileBrowser.WaitForLoadDialog( false, null, "Load File", "Load" );

		Debug.Log( FileBrowser.Success + " " + FileBrowser.Result );

		if( FileBrowser.Success )
		{
            string datacell = FileBrowser.Result;
            bigdata = SaveGame.Load <DataAll> (datacell);
            DataPages = bigdata.dv;
            DataPunaises = bigdata.dp;
           GameObject NewVersoLoad;
            Debug.Log("Fichié loadé");
            for (int i=0; i < DataB.DataPages.Count; i++){
             	NewVersoLoad = Instantiate (MiniVersoLoad);
			    NewVersoLoad.name = DataB.DataPages[i].DataNom;
			    NewVersoLoad.GetComponent<GestionVerso>().VersoID  = NewVersoLoad.name;
			    NewVersoLoad.transform.position = DataB.DataPages[i].DataPosition;
		    }
            GameObject NewPunaiseLoad;
            for (int i=0; i < DataB.DataPunaises.Count; i++){
                NewPunaiseLoad = Instantiate (PunaiseLoad);
                NewPunaiseLoad.name = DataB.DataPunaises[i].PunaiseNom;
                NewPunaiseLoad.transform.position = DataB.DataPunaises[i].PunaisePosition;
                NewPunaiseLoad.GetComponent<GestionPunaise> ().Onglet = DataB.DataPunaises[i].OngletNom;
                NewPunaiseLoad.GetComponent<GestionPunaise> ().Puce = DataB.DataPunaises[i].PuceNom;
                NewPunaiseLoad.GetComponent<GestionPunaise>().TypePuce = DataB.DataPunaises[i].TypePuce;
                string retouronglet = NewPunaiseLoad.GetComponent<GestionPunaise> ().Onglet;
                string stronglet = retouronglet.Replace("_Mini-Onglet","");

                GameObject Pereonglet;
                Pereonglet = GameObject.Find(stronglet);
                
                NOnglet = Pereonglet.transform.Find(retouronglet).gameObject; // <- le problème est ici
                //NOnglet = GameObject.Find(pereonglet+"/"+retouronglet);
                
                
J'ai tenté deux version pour aller chercher ce child :

- en utilisant le GameObject père : Pereonglet.transform.Find(nom_du_child).gameObject -> ça ne fonctionne pas
- en précisant la hiérarchie à utiliser : GameObject.Find ("pere/fils") -> ne fonctionne pas non plus

si quelqu'un avait une idée d'où peut venir mon problème, ce serait formidable :)

Cordialement,
Kobal.

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB][AL] GameObject child impossible à trouver

Message par djulio74 » 17 Mai 2020 21:06

Si tu recherche un gameobject par son nom, il faut mettre des guillemet pour le nom, c'est un string ( pas le sous-vêtements hein, ^^).
Donc remplacer ta recherche par "nom_du_child" avec les guillemets

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Kobal
Messages : 7
Inscription : 12 Mars 2019 11:15

Re: [DB][AL] GameObject child impossible à trouver

Message par Kobal » 17 Mai 2020 23:54

djulio74 a écrit :
17 Mai 2020 21:06
Si tu recherche un gameobject par son nom, il faut mettre des guillemet pour le nom, c'est un string ( pas le sous-vêtements hein, ^^).
Donc remplacer ta recherche par "nom_du_child" avec les guillemets
En l'occurrence il s'agit d'une variable string, les guillemets sont donc déjà dedans :

string retouronglet = NewPunaiseLoad.GetComponent<GestionPunaise> ().Onglet;
NOnglet = Pereonglet.transform.Find(retouronglet).gameObject;

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB][AL] GameObject child impossible à trouver

Message par djulio74 » 18 Mai 2020 00:42

Ok autant pour moi j'avais mal vu.
sinon quitte a dire d'autre betise :
- le pereonglet est-il bien trouvé avec

Code : Tout sélectionner

Pereonglet = GameObject.Find(stronglet);
des fois qu'il y ai une histoire d'espace qui traine en début ou fin de string?

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Kobal
Messages : 7
Inscription : 12 Mars 2019 11:15

Re: [DB][AL] GameObject child impossible à trouver

Message par Kobal » 18 Mai 2020 12:19

djulio74 a écrit :
18 Mai 2020 00:42
Ok autant pour moi j'avais mal vu.
sinon quitte a dire d'autre betise :
- le pereonglet est-il bien trouvé avec

Code : Tout sélectionner

Pereonglet = GameObject.Find(stronglet);
des fois qu'il y ai une histoire d'espace qui traine en début ou fin de string?
Hello !

Oui tout à fait, j'ai d'ailleurs pu le vérifier lorsque j’exécute le programme, je vois bien les objets instanciés, dont le gameobject pereonglet nommé stronglet.

Cordialement,
Kobal.

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB][AL] GameObject child impossible à trouver

Message par djulio74 » 18 Mai 2020 12:43

Kobal a écrit :
18 Mai 2020 12:19
djulio74 a écrit :
18 Mai 2020 00:42
Ok autant pour moi j'avais mal vu.
sinon quitte a dire d'autre betise :
- le pereonglet est-il bien trouvé avec

Code : Tout sélectionner

Pereonglet = GameObject.Find(stronglet);
des fois qu'il y ai une histoire d'espace qui traine en début ou fin de string?
Hello !

Oui tout à fait, j'ai d'ailleurs pu le vérifier lorsque j’exécute le programme, je vois bien les objets instanciés, dont le gameobject pereonglet nommé stronglet.

Cordialement,
Kobal.
Je ne doute pas qu'il soit présent, mais c’était pour être sur que le nom n'ai pas un espace au début ou a la fin, qui peut porter errer, et du coup rendrai null la recherche avec le nom sans espace. il en va de même avec les child.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Kobal
Messages : 7
Inscription : 12 Mars 2019 11:15

Re: [DB][AL] GameObject child impossible à trouver

Message par Kobal » 18 Mai 2020 19:15

djulio74 a écrit :
18 Mai 2020 12:43
Kobal a écrit :
18 Mai 2020 12:19
djulio74 a écrit :
18 Mai 2020 00:42
Ok autant pour moi j'avais mal vu.
sinon quitte a dire d'autre betise :
- le pereonglet est-il bien trouvé avec

Code : Tout sélectionner

Pereonglet = GameObject.Find(stronglet);
des fois qu'il y ai une histoire d'espace qui traine en début ou fin de string?
Hello !

Oui tout à fait, j'ai d'ailleurs pu le vérifier lorsque j’exécute le programme, je vois bien les objets instanciés, dont le gameobject pereonglet nommé stronglet.

Cordialement,
Kobal.
Je ne doute pas qu'il soit présent, mais c’était pour être sur que le nom n'ai pas un espace au début ou a la fin, qui peut porter errer, et du coup rendrai null la recherche avec le nom sans espace. il en va de même avec les child.
Du coup j'ai vérifié si il n'y avait pas des caractères en trop quelque part et rien. Cependant je pense avoir trouvé un contournement en appelant les child par numéro d'ordre :

NOnglet = Pereonglet.transform.GetChild(0).gameObject;

(l'objet que je cherche est en première positiion, j'ai changé mon prefab pour que ce soit le cas).

Du coup l'énigme n'est pas résolue mais mon problème si :)

merci à toi !

Cordialement,
Kobal

Répondre

Revenir vers « (C#) CSharp »