Mon but est de créer un mur derrière un LightCycle qui suit la moto,de longueur fixe et qui suit le chemin qu'à pris la moto
(un serpent raide derrière la moto où moto est la tête du serpent)
Donc je crée une liste fixe composée de cell_wall auxquels j'attribue la même translation que celle de moto(ListWall[0])
Quand moto tourne,je capture la position=ListVector[j] où moto a tourné.Dès que chaque cellule arrive à cette position,elle tourne de la même manière que moto vient de tourner.
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
//dans ce script,je construis le mur derrière la moto en juxtaposant successivement par une liste un petit mur
public class mur_moto : MonoBehaviour
{
List<GameObject> ListWall = new List<GameObject>();
List<Vector3> ListVector = new List<Vector3>();
public GameObject moto, cell_wall;
public int count = 10; // le nombre d'objets que vous voulez dans la liste
public KeyCode droite, gauche;
public float vitesse, espacement, seuil;
float vitesse_const;
int i;
Vector3 v;
int j = -1;
void Start()
{
vitesse_const = vitesse;
ListWall.Add(moto);
ListWall[0].name = "moto";
ListWall[0].transform.position = Vector3.zero;
//construction du mur
for (i = 1; i < count; i++)
{
ListWall.Add(Instantiate(cell_wall));
ListWall[i].name = "cell_wall " + i;
ListWall[i].transform.position = new Vector3(0, 0, -i * espacement);
}
}
void Update()
{
if (Input.GetKeyDown(droite))
{
j++;
ListVector.Add(v);
//moto tourne
ListWall[0].transform.Rotate(0, 90, 0, Space.Self);
//quand moto a tourné est capturé sa position
ListVector[j] = ListWall[0].GetComponent<Transform>().position;
//pour chaque fraction du mur orthogonale à moto et arrivant à la position où moto a tourné
for (i = 1; i <= count - 1; i++)
{
// condition non atteinte
if (Vector3.Distance(ListVector[j],ListWall[i].transform.position)<seuil)
{
//la fraction du mur tourne
ListWall[i].transform.Rotate(0, 90, 0, Space.Self);
}
}
}
if (Input.GetKeyDown(gauche))
{
j++;
ListVector.Add(v);
//moto tourne
ListWall[0].transform.Rotate(0, -90, 0, Space.Self);
//quand moto a tourné est capturé sa position
ListVector[j] = ListWall[0].GetComponent<Transform>().position;
//pour chaque fraction du mur orthogonale à moto et arrivant à la position où moto a tourné
for (i = 1; i <= count - 1; i++)
{
// condition non atteinte
if (Vector3.Distance(ListVector[j],ListWall[i].transform.position)<seuil)
{
//la fraction du mur tourne
ListWall[i].transform.Rotate(0, -90, 0, Space.Self);
}
}
}
//translations de moto et des empties
for (i = 0; i <= count - 1; i++)
{ ListWall[i].transform.Translate(0, 0, vitesse_const * Time.deltaTime, Space.Self); }
}
}
dès que cell_wall arrive dans la scène à ListVector[j],le code tant de fois modifié ne le reconnaît pas!
Pouvez-vous m'aider?
merci de votre aide