public List <Waypoint> GetWaypointsFromSplineAtOffset(Spline spline, float offset, int segmentsPerBezier) { List <Vector3> vectorWaypoints = new List <Vector3>(); var numberOfPoints = spline.GetPointCount(); for (var i = 0; i < numberOfPoints; i++) { var position = spline.GetPosition(i); int nextPointIndex = i + 1; if (i + 1 >= numberOfPoints) { if (spline.isOpenEnded) { continue; } nextPointIndex = 0; } var nextPosition = spline.GetPosition(nextPointIndex); var path = this.GetInnerCoordsForOffsetBezier( position, nextPosition, position + spline.GetRightTangent(i), nextPosition + spline.GetLeftTangent(nextPointIndex), offset, segmentsPerBezier); vectorWaypoints.AddRange(path); } var waypoints = vectorWaypoints .Select(v => new Waypoint(v)).ToList(); for (var i = 0; i < waypoints.Count - 1; i++) { waypoints[i].SetNext(waypoints[i + 1]); } if (!spline.isOpenEnded) { waypoints.Last().SetNext(waypoints.First()); } return(waypoints); }
private void Update() { if (GameObjectController.IsConnected() && !Network.isServer) { return; } if (!Spline.End) { gameObject.transform.position = Spline.GetPosition(); Spline.Update(Time.deltaTime); } else { InFormation = true; } }