Création d'une route

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Apoca
Messages : 3
Inscription : 07 Mars 2023 18:24

Création d'une route

Message par Apoca » 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.
screen.png
screen.png (304.08 Kio) Consulté 2024 fois
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;



        }
    }

Répondre

Revenir vers « Scripting »