[RESOLU] [DB ] [AL] Faire glisser plusieurs objets

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
stephtice
Messages : 2
Inscription : 08 Mai 2018 10:35

[RESOLU] [DB ] [AL] Faire glisser plusieurs objets

Message par stephtice » 27 Mars 2020 19:47

Bonjour,
Débutant sur Unity et en programmation, je souhaite, en utilisant la touche espace, lancer le déplacement de cubes qui doivent glisser jusqu'à leur nouvelle position.
J'ai pu le faire pour un seul avec "MoveTowards" mais pour plusieurs dans une boucle cela ne fonctionne pas. Les cubes vont directement à leur position finale. Je pense que cela vient d'un problème entre update () et le Time.deltaTime mais que je ne perçois pas.
Voici mon code:

Code : Tout sélectionner

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

public class depart : MonoBehaviour
{
	// affichage cubes
	public GameObject Cube;
	private float randx;
	private float randy;
	private int numero = 0;
	private Vector2 posi;
	public int min;
	public int max;
	public int nbcible;
	private int compteur = 0;

	// Use this for initialization
	void Start()
	{
		nbcible = Random.Range (min, max);

	}
	
	// Update is called once per frame
	void Update()
	{
		while (compteur < nbcible)
		{
			Affichecubes ();
			compteur++;
		}	
	}

	void Affichecubes()
	{	
		numero++;
		randx = Random.Range (-36f, 36f);
		randy = Random.Range (-27f, -5f);
		posi = new Vector2 (randx, randy);
		GameObject newcube = Instantiate (Cube, posi, Quaternion.identity); // crée le nouvel objet (clone)
		newcube.name = "cube" + numero; // donne son nom au nouvel objet
		newcube.tag = "cubes";					
	}

	public int Affectevaleur()
	{
		return nbcible;
	}
}

et pour le déplacement :

Code : Tout sélectionner

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

public class deplacement : MonoBehaviour
{
	Vector2 destination;
	public float vitessedep = 50f;
	private bool go = false;
	private int nbcible;
	private string _nom;

	// Use this for initialization
	void Start()
	{
		
	}
	
	// Update is called once per frame
	void Update()
	{
		destination = new Vector2 (5f, 5f);
		if (Input.GetKey (KeyCode.Space))
		{
			nbcible = GetComponent<depart> ().Affectevaleur ();
			go = true;
		}
		if (go == true)
		{
			for (int i = 1; i <= nbcible; i++)
			{
				GameObject Cube = GameObject.Find ("cube" + i.ToString ());
				destination = Cube.transform.position;
				Glisse (Cube, destination);
				destination = new Vector2 (5f + 5 * i, 5f + 5 * i);
			}
		}
	}

	void Glisse(GameObject Obj, Vector2 destination)
	{
		Obj.transform.position = Vector2.MoveTowards (transform.position, destination, vitessedep * Time.deltaTime);
	}
}
Merci par avance de votre aide.
Dernière édition par stephtice le 30 Mars 2020 23:25, édité 1 fois.

stephtice
Messages : 2
Inscription : 08 Mai 2018 10:35

Re: [DB ] [AL]Faire glisser plusieurs objets

Message par stephtice » 30 Mars 2020 23:23

Résolu avec le code suivant:

Code : Tout sélectionner

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

public class deplacement : MonoBehaviour
{
	Vector2 destination;
	public float vitessedep = 50f;
	private bool go = false;
	private int nbcible;
	private string _nom;

	// Use this for initialization
	void Start()
	{
		
	}
	
	// Update is called once per frame
	void Update()
	{
		destination = new Vector2 (5f, 5f);
		if (Input.GetKey (KeyCode.Space))
		{
			nbcible = GetComponent<depart> ().Affectevaleur ();
			go = true;
		}
		if (go == true)
		{
			for (int i = 1; i <= nbcible; i++)
			{
				GameObject Cube = GameObject.Find ("cube" + i.ToString ());
				destination = Cube.transform.position; //SOLUTIONS 01/02 -> erreur, ligne  à enlever
				Glisse (Cube, destination);
				destination = new Vector2 (5f + 5 * i, 5f + 5 * i);
			}
		}
	}

	void Glisse(GameObject Obj, Vector2 destination)
	{
	 // SOLUTION 02/02 -> transform.position changé en Obj.transform.position
		Obj.transform.position = Vector2.MoveTowards (Obj.transform.position, destination, vitessedep * Time.deltaTime);               
	}
}


Répondre

Revenir vers « Scripting »