Salut, alors déjà est-ce que tu veux ton GO se déplace du point A à Z en interpolant le tout ou tu veux qu'il se téléporte sur chaque case toutes les 1 seconde par exemple ?
Déjà je ne comprend pas l'utilisation de 3 tableau pour ton système, tu pourrait faire une queue avec une coroutine comme ça.
Code : Tout sélectionner
enum DirectionEnum
{
haut,
bas,
gauche,
droite
}
public Queue<DirectionEnum> m_directionHolder = new Queue<DirectionEnum>();
public GameObject m_varObjMonRobot;
public float m_jumpDistance = 1f;
public Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
AddPosition(DirectionEnum.haut);
}
}
public void AddPosition(DirectionEnum direction)
{
m_directionHolder.Enqueue(direction);
}
public void ProcessPositions()
{
StartCoroutine("Routine");
}
IEnumerator Routine()
{
while(m_directionHolder.count > 0)
{
DirectionEnum direction = m_positionsHolder.Dequeue();
Vector3 nextPosition;
switch(direction)
{
case DirectionEnum.haut:
nextPosition = new Vector3(0f, m_jumpDistance, 0f);
break;
case DirectionEnum.bas:
nextPosition = new Vector3(0f, -m_jumpDistance, 0f);
break;
case DirectionEnum.gauche:
nextPosition = new Vector3(0f, 0f, -m_jumpDistance);
break;
case DirectionEnum.droite:
nextPosition = new Vector3(0f, 0f, m_jumpDistance);
break;
}
m_varObjMonRobot.transform.position += nextPosition;
yield return new WaitForSeconds(1f);
}
yield return null;
}
La coroutine va dire à unity d'attendre 1 seconde avant la prochaine itération du while, quand la boucle est fini la coroutine prend fin avec le "return null".
Ensuite quand c'est le bon moment tu appel la coroutine avec la fonction ProcessPositions, si tu a du code perso a exécuter à chaque fois que ça se passe tu le met dans cette fonction
Après je n'ai pas de debuger sous la main donc il doit surement y avoir une faute.