private static void GenerateTrack(GameObject segmentObject, RailPathPoint p1, RailPathPoint p2, RailSettings settings, Vector3 fromVectorPpc, Vector3 toVectorPpc, float offset) { GameObject trackObject = new GameObject("Track"); trackObject.layer = LayerMask.NameToLayer("Ground"); trackObject.transform.SetParent(segmentObject.transform); MeshFilter meshFilter = trackObject.AddComponent <MeshFilter>(); MeshRenderer meshRenderer = trackObject.AddComponent <MeshRenderer>(); Vector3[] vertices = new Vector3[0]; int[] triangles = new int[0]; Vector3 heightOffsetUpper = new Vector3(0f, settings.TrackHeight + settings.PlankHeight, 0f); Vector3 heightOffsetLower = new Vector3(0f, settings.PlankHeight, 0f); // Left Side List <Vector3> leftSide = new List <Vector3>() { p2.Position + (toVectorPpc * offset) + heightOffsetUpper, p1.Position + (fromVectorPpc * offset) + heightOffsetUpper, p1.Position + (fromVectorPpc * offset) + heightOffsetLower, p2.Position + (toVectorPpc * offset) + heightOffsetLower, }; MeshGenerator.AddPlane(ref vertices, ref triangles, leftSide); // Right Side List <Vector3> rightSide = new List <Vector3>() { p1.Position + (fromVectorPpc * (offset + settings.TrackWidth)) + heightOffsetUpper, p2.Position + (toVectorPpc * (offset + settings.TrackWidth)) + heightOffsetUpper, p2.Position + (toVectorPpc * (offset + settings.TrackWidth)) + heightOffsetLower, p1.Position + (fromVectorPpc * (offset + settings.TrackWidth)) + heightOffsetLower, }; MeshGenerator.AddPlane(ref vertices, ref triangles, rightSide); // Top Side List <Vector3> topSide = new List <Vector3>() { p1.Position + (fromVectorPpc * offset) + heightOffsetUpper, p2.Position + (toVectorPpc * offset) + heightOffsetUpper, p2.Position + (toVectorPpc * (offset + settings.TrackWidth)) + heightOffsetUpper, p1.Position + (fromVectorPpc * (offset + settings.TrackWidth)) + heightOffsetUpper, }; MeshGenerator.AddPlane(ref vertices, ref triangles, topSide); meshFilter.mesh.vertices = vertices; meshFilter.mesh.triangles = triangles; meshFilter.mesh.RecalculateNormals(); meshRenderer.material = MaterialHandler.Instance.DefaultMaterial; meshRenderer.material.color = MaterialHandler.Instance.RailTrackColor; trackObject.AddComponent <MeshCollider>(); }