Пример #1
0
        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);
        }
Пример #2
0
        private void Update()
        {
            if (GameObjectController.IsConnected() && !Network.isServer)
            {
                return;
            }

            if (!Spline.End)
            {
                gameObject.transform.position = Spline.GetPosition();
                Spline.Update(Time.deltaTime);
            }
            else
            {
                InFormation = true;
            }
        }