il faut tu reste avec MoveTowards
pour ton histoire de cases :
il suffit d'un array de vector2.
Ensuite pour tes déplacement, il ne faudra plus donner une direction sous forme de vector, mais sou forme de int.
Admettons un plateau de 4 x 4 case, donc une taille de 4.
tu aurra 4x4 = 16 cases. Il suffit de donner à chaque case ses coordonnées.
Après pour aller vers le haut ce sera case +4 (taille), vers le bas case -4, +1 et -1 pour gauche et droite.
Admettons ton robot est en case 5. un déplacement vers le haut le mènera a la case 5+4 ( dans le case d'une grille de 4x4) donc 9. tu prend les coordonnées de la case 9 et tu y déplace ton robot.
un Exemple vite fait de script :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
public int taille = 4;
private Vector3[] cases;
private bool[] occupe;
public int pos; // stock la case sur laquelle est le robot.
void Start ()
{
// on defini la taille des array cases et occupé
cases = new Vector3[taille * taille];
occupe = new bool[taille * taille];
for (int i = 0; i < taille; i++) {
for (int j = 0; j < taille; j++) {
cases [i * taille + j] = new Vector3 (j,0, i);
occupe [i * taille + j] = false;
}
}
pos = 5;
transform.position = cases [pos]; // tu pose ton robot a la case 5
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown (KeyCode.UpArrow)) {
pos += taille;
StartCoroutine( Move() );
}
if (Input.GetKeyDown (KeyCode.DownArrow)) {
pos -= taille;
StartCoroutine( Move() );
}
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
pos += 1;
StartCoroutine( Move() );
}
if (Input.GetKeyDown (KeyCode.RightArrow)) {
pos -= 1;
StartCoroutine( Move() );
}
}
IEnumerator Move(){
while (transform.position != cases[pos]) {
transform.position = Vector3.MoveTowards(transform.position, cases[pos], Time.deltaTime * 10.0f );
yield return null;
}
}
}
Mes code sont pour de la 3d, pour de la 2D remplacer les Vector3 par vector2, et
cases [i * taille + j] = new Vector3 (j,0, i); deviens cases [i * taille + j] = new Vector2 (j, i);