// 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); }