public OrientedPoint[] GetWallPath(List <Vector3> pts) { OrientedPoint[] path = new OrientedPoint[0]; for (int i = 0; i < pts.Count - 1; i++) { Vector3 p0, p1, m0, m1; p0 = pts[i]; p1 = pts[i + 1]; // m0 if (i == 0) { m0 = p1 - p0; } else { m0 = 0.5f * (p1 - pts[i - 1]); } // m1 if (i < pts.Count - 2) { m1 = 0.5f * (pts[(i + 2) % Points.Count] - p0); } else { m1 = p1 - p0; } OrientedPoint[] pathSegment = CatmullRom.GeneratePath(p0, p1, m0, m1, CurveResolution).ToArray <OrientedPoint>(); path = path.Concat(pathSegment).ToArray <OrientedPoint>(); } return(path); }