positionner et translater des objets crées dynamiquement

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
Kaloverian
Messages : 342
Inscription : 10 Août 2016 03:03

positionner et translater des objets crées dynamiquement

Message par Kaloverian » 30 Avr 2019 00:43

bonjour,

Je n'arrive pas coder pour positionner et translater avec différents vecteurs prédéfinis des objets crées dynamiquement(pas par Instantiate de manière à éviter de les faire glisser un à un dans ce script)

Mon code presque juste qui ne fonctionne pas ,bien qu'arrangé de manières différentes à plusieurs reprises,ressemble à ceci:

Code : Tout sélectionner

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

//ne fonctionne pas!

public class list_of_vectors : MonoBehaviour
{
	public float moveSpeed = 2f;
	static int i=0;
	public GameObject objet_mesh_de_reference;
	
	
	

	List<Transform> allCreations = new List<Transform>();
	List<MeshRenderer> allRender = new List<MeshRenderer>();
	List<MeshFilter> allMeshFilter = new List<MeshFilter>();
	List<Vector3>vector=new List<Vector3>();
	List<Vector3>endroit=new List<Vector3>();
	




	// Use this for initialization
	void Start ()
	{
		vector[0]=new Vector3(1,1,1);
		vector[1]=new Vector3(1,0,1);
		vector[2]=new Vector3(1,0,-1);
		vector[3]=new Vector3(1,1,0);

		endroit [0] =vector[0];
		endroit [1] =vector[1];
		endroit [2] =vector[2];
		endroit [3] =vector[3];






	}



void Update(){
for (i = 0; i <= 3; i++) {//création dynamique  d'objets(ça fonctionne)
				GameObject objeti = new GameObject ("objet" + i);
				
				//à chaque objet crée dynamiquement,une transformation est rajoutée dans la liste des 
                                    transformations
				allCreations.Add (objet.transform);
				
				//devrait positionner chaque objeti à un endroit précis(ça ne fonctionne pas!)
				allCreations [i].position = endroit [i];
				
				allRender.Add (objeti.AddComponent<MeshRenderer> ());
				llMeshFilter.Add (objeti.AddComponent<MeshFilter> ());
				
                               //une translation de vecteur différent à chaque objet i(ça ne fonctionne pas)
				allCreations[i].Translate (vector [i] * moveSpeed * Time.deltaTime, Space.Self);
			}
			
			 foreach (var mesh in allMeshFilter) {
			if (mesh != null)
				mesh.mesh = objet_mesh_de_reference.GetComponent<MeshFilter> ().mesh;
		}
			}
}
Pourrait-on me corriger ce code?

merci de votre aide

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

Re: positionner et translater des objets crées dynamiquement

Message par Max » 30 Avr 2019 08:10

Bonjour,

j'ai du mal à trouver un sens à ton script. Comme toujours, tu n'expliques rien, on ne sais pas ce que tu cherches à faire globalement. Pourquoi ces manipulations de MeshFilter et autres MeshRenderer par exemple ?
Pas facile dans ces conditions de t'aider vraiment.
(pas par Instantiate de manière à éviter de les faire glisser un à un dans ce script)
ça il faudrait que tu m'expliques. J'ai le sentiment que tu te fourvoies en ce qui concerne certains mécanismes d'Unity.

Il semble y avoir certaines erreurs de syntaxe (est-ce dû au copié/collé de ton IDE vers le forum ?)
Il manque des // devant transformations.
Ce n'est probablement pas allCreations.Add(objet.transform); mais allCreations.Add(objeti.transform);
Ce n'est probablement pas llMeshFilter mais allMeshFilter.

Dans ton Update, tu as cette boucle de 3 itérations ( for (i = 0; i <= 3; i++) ) qui créé des GO and co.
Tu as j'imagine à l’esprit qu'en 10 minutes, cela générer plus de 100.000 gameobjets je suppose...
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
Kaloverian
Messages : 342
Inscription : 10 Août 2016 03:03

Re: positionner et translater des objets crées dynamiquement

Message par Kaloverian » 30 Avr 2019 16:56

code corrigé qui fonctionne:

Code : Tout sélectionner

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



public class list_of_vectors : MonoBehaviour
{
	public float moveSpeed = 2f;
	static int i,j,p=0;
	
	public GameObject objet,mesh_filter;
	

	List<Transform> allCreations = new List<Transform>();
	List<MeshRenderer> allRender = new List<MeshRenderer>();
	List<MeshFilter> allMeshFilter = new List<MeshFilter>();


	List<Vector3>vector=new List<Vector3>();
	List<Vector3>endroit=new List<Vector3>();


// Use this for initialization
	void Start ()
	{   
		vector.Add (new Vector3(1,1,1));
		vector.Add (new Vector3(1,0,1));
		vector.Add (new Vector3(1,1,-1));
		vector.Add (new Vector3(1,1,0));

		endroit.Add (new Vector3(1,1,1));
		endroit.Add (new Vector3(1,0,1));
		endroit.Add (new Vector3(1,1,-1));
		endroit.Add (new Vector3(1,1,0));
		


		
			
	}

// Update is called once per frame
	void Update ()
	{
		

		if (Input.GetKeyDown (KeyCode.D)) {p++;
		
			for (i = 0; i <= 3; i++) {
				objet = new GameObject ("objet" + i);
				allCreations.Add (objet.transform);
			
				objet.transform.position =endroit[i];
				allRender.Add (objet.AddComponent<MeshRenderer> ());
				allMeshFilter.Add (objet.AddComponent<MeshFilter> ());

				vector.Add (new Vector3(1,1,1));
				vector.Add (new Vector3(1,0,1));
				vector.Add (new Vector3(1,1,-1));
				vector.Add (new Vector3(1,1,0));



			   print ("liste de vecteurs:" + vector[i]);
			   print ("liste d'endroits:" + endroit[i]);
				}

			}

		for (j = 4*(p-1); j <=4*(p-1)+3; j++) {
			allCreations [j].Translate (vector [j] * moveSpeed * Time.deltaTime, Space.Self);
		}

		

	

		foreach (var filt1 in allMeshFilter){
			if (filt1 != null)
				filt1.mesh = mesh_filter.GetComponent<MeshFilter> ().mesh;
		}


             

		}


	}


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

Re: positionner et translater des objets crées dynamiquement

Message par Max » 30 Avr 2019 17:13

Et tu n'as aucune erreur lors de l’exécution ?
Je suis très perplexe.
Déjà rien qu'au départ, avec une liste allCreations vide, P=0 (donc j va prendre -4 pour commencer), et derrière dans l'Update la partie

Code : Tout sélectionner

        for (j = 4 * (p - 1); j <= 4 * (p - 1) + 3; j++)
        {
            allCreations[j].Translate(vector[j] * moveSpeed * Time.deltaTime, Space.Self);
        }
j'ai du mal à voir comment cela peut tourner en l'état :triste1:
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
Kaloverian
Messages : 342
Inscription : 10 Août 2016 03:03

Re: positionner et translater des objets crées dynamiquement

Message par Kaloverian » 30 Avr 2019 17:37

non!
dès le commencement de la seconde boucle,p vaut 1 car avant j'ai appuyé sur la touche qui incrémente p de 1 à chaque appui

Répondre

Revenir vers « (C#) CSharp »