// Update is called once per frame
    void Update()
    {
        PathBuilder pathBuilder = new PathBuilder();

        pathBuilder.SetUpSubmeshes(subMeshSize);

        MeshFilter   meshFilter   = this.GetComponent <MeshFilter>();
        MeshRenderer meshrenderer = this.GetComponent <MeshRenderer>();
        MeshCollider meshCollider = this.GetComponent <MeshCollider>();

        Vector3[] prevShape = TranslateShape(
            Path[Path.Length - 1].transform.position,
            (Path[0].transform.position - Path[Path.Length - 1].transform.position).normalized, pathShape
            );

        int subMeshIndex = 0;

        for (int i = 0; i < Path.Length; i++)
        {
            Vector3[] currentShape = TranslateShape(
                Path[i].transform.position,
                (Path[(i + 1) % Path.Length].transform.position - Path[i].transform.position).normalized, pathShape
                );

            for (int j = 0; j < currentShape.Length - 1; j++)
            {
                pathBuilder.BuildMeshTriangle(prevShape[j], currentShape[j], currentShape[j + 1], subMeshIndex % subMeshSize);
                pathBuilder.BuildMeshTriangle(prevShape[j + 1], prevShape[j], currentShape[j + 1], subMeshIndex % subMeshSize);
            }

            subMeshIndex++;

            prevShape = currentShape;
        }


        meshFilter.mesh         = pathBuilder.CreateMesh();
        meshCollider.sharedMesh = meshFilter.mesh;
        pathBuilder.AddMaterials(meshrenderer);
    }