public void Set(WeakpointFormation other)
        {
            _type            = other._type;
            _rotateSpeed     = other._rotateSpeed;
            _distance        = other._distance;
            _followSpeed     = other._followSpeed;
            _transistionTime = other._transistionTime;
            _delay           = other._delay;
            _animationName   = other._animationName;
            _pivot           = other._pivot;

            _customTrackPoint = new Transform[other._customTrackPoint.Length];
            for (int i = 0; i < _customTrackPoint.Length; i++)
            {
                _customTrackPoint[i] = other._customTrackPoint[i];
            }
        }
        public void SwitchToFormat(WeakpointFormation formation)
        {
            _lastFormation.Set(_currentFormation);
            _targetFormation.Set(formation);

            _transiting     = true;
            _transitionTime = 0;

            if (_targetFormation._type == _lastFormation._type)
            {
                return;
            }

            _transitionStartPoint.Clear();
            foreach (var point in _trackPoints)
            {
                _transitionStartPoint.Add(point.position);
            }

            Vector3[] targetPoints;
            CalculateTargetPoints(out targetPoints);
            SortTrackPointstoClosestTarget(targetPoints);
        }