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;
}
}
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);
}
}