Example #1
0
 private void OnEnable()
 {
     point  = target as SplinePoint;
     spline = point.transform.GetComponentInParent <Spline>(true);
 }
Example #2
0
        public static MeshFilter CreateRoad(this MeshFilter self, Spline.Spline spline, int resolution, float width)
        {
            if (self.sharedMesh == null)
            {
                self.sharedMesh = new Mesh()
                {
                    name = "Road"
                }
            }
            ;

            points.Clear();
            normals.Clear();
            uvs.Clear();
            triangles.Clear();

            var radius  = width * 0.5f;
            var yCount  = resolution;
            var yLenght = spline.Length / yCount;
            var xCount  = Mathf.CeilToInt(width / yLenght);
            var xLength = width / xCount;

            var uvY = (spline.Length / width) / yCount;
            var uvX = 1.0f / xCount;

            for (int i = 0; i <= yCount; i++)
            {
                var point = spline.GetLocalPoint(i * yLenght);
                var cross = Vector3.Cross(point.forward, point.upward).normalized;
                var right = point.position - cross * radius;
                points.Add(right);
                normals.Add(point.upward);

                var t = i * uvY;
                uvs.Add(new Vector2(1, t));

                var tileL = (cross * xLength);
                for (int c = 1; c <= xCount; c++)
                {
                    points.Add(right + tileL * c);
                    normals.Add(point.upward);
                    uvs.Add(new Vector2(1 - uvX * c, t));
                }
            }


            for (int y = 0; y < yCount; y++)
            {
                var a = y * (xCount + 1);
                for (int x = 0; x < xCount; x++)
                {
                    int i = x + a;
                    triangles.Add(i);
                    triangles.Add(i + 1);
                    triangles.Add(i + xCount + 1);

                    triangles.Add(i + 1);
                    triangles.Add(i + xCount + 2);
                    triangles.Add(i + xCount + 1);
                }
            }

            self.sharedMesh.Clear();
            if (points.Count > 3)
            {
                self.sharedMesh.vertices  = points.ToArray();
                self.sharedMesh.normals   = normals.ToArray();
                self.sharedMesh.uv        = uvs.ToArray();
                self.sharedMesh.triangles = triangles.ToArray();
                self.sharedMesh.RecalculateNormals();
            }

            return(self);
        }
#endif
    }
Example #3
0
 private void OnEnable()
 {
     spline = target as Spline;
 }