Page 1 sur 1

positionner et translater des objets crées dynamiquement

Publié : 30 Avr 2019 00:43
par Kaloverian
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

Re: positionner et translater des objets crées dynamiquement

Publié : 30 Avr 2019 08:10
par Max
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...

Re: positionner et translater des objets crées dynamiquement

Publié : 30 Avr 2019 16:56
par Kaloverian
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;
		}


             

		}


	}


Re: positionner et translater des objets crées dynamiquement

Publié : 30 Avr 2019 17:13
par Max
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:

Re: positionner et translater des objets crées dynamiquement

Publié : 30 Avr 2019 17:37
par Kaloverian
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