Vector3 getPointAtT(float t) { int i0 = 0, i1 = 0, i2 = 0, i3 = 0; // indices if (closed) { i0 = ((int)t) % points.Count; int add = (int)t; if (curveType == CurveType.Bezier && add >= 1) { // i0, i1, i2, i3 // t = 0 // i3, i0, i1, i2 // t = 1 // i2, i3, i0, i1 // t = 2 // i1, i2, i3, i0 // t = 3 i0 = (3 * add) % points.Count; } i1 = (i0 + 1) % points.Count; i2 = (i1 + 1) % points.Count; i3 = (i2 + 1) % points.Count; } else { i0 = 0; i1 = 1; i2 = 2; i3 = 3; } // Debug.Log("i0 " + i0 + ", i1 " + i1 + ", i2 " + i2 + ", i3 " + i3); CurveSegment csX = new CurveSegment(curveType, points[i0].position.x, points[i1].position.x, points[i2].position.x, points[i3].position.x); CurveSegment csY = new CurveSegment(curveType, points[i0].position.y, points[i1].position.y, points[i2].position.y, points[i3].position.y); //CurveSegment csZ = new CurveSegment(curveType, points[i0].position.z, points[i1].position.z, points[i2].position.z, points[i3].position.z); float x = csX.Evaluate(t); float y = csY.Evaluate(t); //float z = csZ.Evaluate(t); //Vector3 p = new Vector3(x, y, z); Vector3 p = new Vector3(x, y, 0f); return(p); }