[Résolu] Transform.parent d'un (Clone)!

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
Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

[Résolu] Transform.parent d'un (Clone)!

Message par kikicosmo » 02 Nov 2015 09:52

Bonjour à tous
il m'arrive depuis quelques jours un TRUC que je ne saurai expliquer!
j'ai pourtant tester 36 000 manières différentes, mais le problème n'est pas résolu.

Voilà, je fais un appel via le SDK Facebook pour afficher ma liste d'amis dans un scroll,
jusque là tout va bien, les amis sont là ainsi que leur score et leur avatar...
Le beug c'est que pour les afficher dans le scroll, je duplique un bloc dans lequel sont affichées des données vierges, dans le niveau mais caché de la caméra, le script en fait des "Clones" autant de fois qu'il y a d'amis et les "transform.parent" dans le scroll pour les afficher à l'écran.
Le problème c'est qu'en les "transform.parent" cela modifie considérablement le scale et la position z du bloc de données... (genre scale de 1,1,1 qui devient 1200,1200,1200 et position z de 0 qui devient 152658) donc du coup , c'est tout pourri LOL
pendant le jeu, si je remet le scale et la position z correctement tout est bien à sa place.

Les données vierges sont dans un panel qui a exactement les mêmes propriétés que le panel ou doivent s'affichés les Clones, et tout ça dans le même Canvas!

Voici le code qui génére les données

Code : Tout sélectionner

public void QueryScores(){
		FB.API ("/app/scores?fields=score,user.limit(30)", Facebook.HttpMethod.GET, ScoresCallback);
	}

	private void ScoresCallback(FBResult result){
		Debug.Log ("Scores Callback: " + result.Text);
		ScoresDebug.text = "";

		scoresList = Util.DeserializeScores (result.Text);

		foreach (Transform child in ScoreScrollList.transform) 
		{
			GameObject.Destroy (child.gameObject);
		}

		foreach (object score in scoresList) {
			var entry = (Dictionary<string,object>)score;
			var user = (Dictionary<string,object>)entry ["user"];

			ScoresDebug.text = ScoresDebug.text + "UN: " + user ["name"] + " - " + entry ["score"] + ", ";	

			GameObject ScorePanel;							  // c'est sur ces 3 lignes que le code détecte
			ScorePanel = Instantiate (ScoreEntryPanel) as GameObject;   // le panel à dupliquer
			ScorePanel.transform.parent = ScoreScrollList.transform;      // et qu'il le change de parent...et là, PAF!!!

			Transform ThisScoreName = ScorePanel.transform.Find ("FriendName");
			Transform ThisScoreScore = ScorePanel.transform.Find ("FriendScore");
			Text ScoreName = ThisScoreName.GetComponent<Text>();
			Text ScoreScore = ThisScoreScore.GetComponent<Text>();

			ScoreName.text = user["name"].ToString();
			ScoreScore.text = entry["score"].ToString();


		}
	}
QueryScores est le bouton sur lequel je clique pour "générer" les données, par la suite le code sera dans le "Start"

Merci de votre aide ;-)
Dernière édition par kikicosmo le 02 Nov 2015 13:00, édité 1 fois.

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

Re: Transform.parent d'un (Clone)!

Message par boubouk50 » 02 Nov 2015 10:15

Tu as essayer de remettre le scale à (1, 1, 1) juste après avoir avoir parenté le GameObject?
"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

Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

Re: Transform.parent d'un (Clone)!

Message par kikicosmo » 02 Nov 2015 11:06

Ben justement le problème c'est que je dois changer le scale d'un (clone) et le peu que j'ai trouvé ne fonctionne pas...
surtout que je n'arrive pas à le "find" avec les "()" du clone....
Car c'est un Clone qui doit être redimensionner...

Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

Re: Transform.parent d'un (Clone)!

Message par kikicosmo » 02 Nov 2015 11:09

Boubouk50, comme tu me dis souvent, tu es "espanté" (comme on dit chez nous)
de me voir faire des choses que je ne pige pas LOL
mais en tatonant je m'en sors pas trop mal... ;-)

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

Re: Transform.parent d'un (Clone)!

Message par boubouk50 » 02 Nov 2015 11:53

Je n'irai pas jusque là, mais oui, je pense que ton réel souci est ta façon de penser/gérer la structure de ton jeu. Les find () sont là pour faciliter la tâche pour trouver un objet, mais pour ma part ils ne devraient pas être utilisés sauf dans de rares cas. Aussi, le clone, tu le stockes bien dans une variable, donc tu peux y avoir accès. Et finalement, un clone une fois initialisé devrait s'auto-gérer.
Je dirai que si ton scale augmente, c'est qu'un des parents a un scale tout petit, ce qu'il faudrait éviter si possible. (1,1,1) devrait être le scale obligatoire si on n'a pas à le changer. Je pense qu'il vaut mieux changer le scale factor dans les options d'import que dans l'inspector.

Code : Tout sélectionner

GameObject ScorePanel;                       // c'est sur ces 3 lignes que le code détecte
ScorePanel = Instantiate (ScoreEntryPanel) as GameObject;   // le panel à dupliquer
ScorePanel.transform.parent = ScoreScrollList.transform;      // et qu'il le change de parent...et là, PAF!!!
ScorePanel.transform.localScale = new Vector3 (1, 1, 1); //ça c'est pour remettre ton Clone à l'échelle (1,1,1) localement
"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

Avatar de l’utilisateur
@RLG
Messages : 367
Inscription : 17 Jan 2015 00:13
Localisation : Rennes

Re: Transform.parent d'un (Clone)!

Message par @RLG » 02 Nov 2015 12:18

Juste pour revenir sur la manière de mettre un GameObject en enfant d'un autre, il y a des nouvelles fonctions ;)

SetParent : http://docs.unity3d.com/ScriptReference ... arent.html

SetParentAndAlign : http://docs.unity3d.com/ScriptReference ... Align.html
Everything happens for a reason. Sometimes the reason is that you're stupid and make bad decisions.

Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

Re: Transform.parent d'un (Clone)!

Message par kikicosmo » 02 Nov 2015 13:00

Un grand merci à toi Boubouk50
En fait j'avais déjà fait un truc de ce genre "LocalScale" mais ça ne fonctionnait pas,
du coup j'ai repris la création de mon slider du début et là, oh miracle! tout fonctionne nickel et mes clones sont à la bonne place et à la bonne taille

C'est vrai que je pense bizarrement, mais j'arrive à me retrouver dans ce que je fais,
je m'éparpille un peu mais ça va pas trop mal

Merci encore, sujet RÉSOLU... ;-)

Répondre

Revenir vers « (C#) CSharp »