Création d'une route
Publié : 12 Mars 2023 09:24
Bonjour, j'ai récupéré dans List<Vector3> path plusieurs vectors3 qui correspondent à plusieurs points qui ont été récupéré en calculant l'itinéraire d'un point A à un point B. J'aimerais maintenant relier ces points pour créer une route qui relie le point de départ et d'arrivée. Comme vous pouvez le voir, les Triangle de la "route" que j'ai essayé de créer ne sont pas tous visible, elle n'est pas uniforme et elle traverse la map.
voici le code utilisé, merci par avance pour votre aide : Code : Tout sélectionner
public void SetRoadPoint(List<Vector3> path)
{
// créer une courbe de Bézier à partir des points du chemin
BezierCurve curve = BezierCurve.CreateCurve(path);
// créer un GameObject pour représenter la route
GameObject roadObject = new GameObject("Road");
// ajouter un composant MeshFilter au GameObject pour contenir la géométrie de la route
MeshFilter meshFilter = roadObject.AddComponent<MeshFilter>();
// créer un nouveau Mesh pour représenter la géométrie de la route
Mesh mesh = new Mesh();
// créer un tableau de Vector3 pour stocker les sommets de la géométrie de la route
Vector3[] vertices = new Vector3[curve.Points.Count * 2];
// créer un tableau d'entiers pour définir les indices des triangles de la géométrie de la route
int numSegments = curve.Points.Count - 1;
if (numSegments > 0)
{
int trianglesPerSegment = 2 * 3; // 2 triangles par segment, 3 indices par triangle
int numTriangles = numSegments * trianglesPerSegment;
int[] triangles = new int[numTriangles];
// calculer les sommets et les triangles de la géométrie de la route
for (int i = 0; i < curve.Points.Count; i++)
{
Vector3 point = curve.Points[i];
Vector3 normal = curve.Normals[i];
// calculer la direction de la route en chaque point
Vector3 direction = Vector3.Cross(Vector3.up, normal).normalized;
// calculer les sommets pour la chaussée
vertices[i * 2] = point - direction * 2.5f; // sommet gauche
vertices[i * 2 + 1] = point + direction * 2.5f; // sommet droit
// calculer les triangles pour la chaussée
if (i < curve.Points.Count - 1)
{
int ti = i * 6;
int vi = i * 2;
triangles[ti] = vi;
triangles[ti + 1] = vi + 1;
triangles[ti + 2] = vi + 2;
triangles[ti + 3] = vi + 1;
triangles[ti + 4] = vi + 3;
triangles[ti + 5] = vi + 2;
}
}
// ajouter les sommets et les triangles au Mesh
mesh.vertices = vertices;
mesh.triangles = triangles;
// ajouter des normales au Mesh pour un éclairage correct
Vector3[] normals = new Vector3[vertices.Length];
for (int i = 0; i < normals.Length; i++)
{
normals[i] = Vector3.up;
}
mesh.normals = normals;
// ajouter des coordonnées de texture pour la texture de la chaussée
Vector2[] uv = new Vector2[vertices.Length];
for (int i = 0; i < uv.Length; i += 2)
{
uv[i] = new Vector2(0, i / 2);
uv[i + 1] = new Vector2(1, i / 2);
}
mesh.uv = uv;
// affecter le Mesh au MeshFilter
meshFilter.mesh = mesh;
// ajouter un composant MeshRenderer au GameObject pour afficher la géométrie de la route
MeshRenderer meshRenderer = roadObject.AddComponent<MeshRenderer>();
// ajouter un matériau pour la texture de la chaussée
meshRenderer.material = new Material(Shader.Find("Standard"));
meshRenderer.material.mainTexture = Resources.Load<Texture>("Texture/Road/Road");
meshRenderer.material = meshRenderer.material;
}
}