void FixedUpdate()
    {
        if (IsParallel && _performer.State == UnitState.HasTargetInDefaultTask)
        {
            _canUpdateTargetPositionAndPath = false;
            return;
        }

        _performer.State = UnitState.CommandPerforming;
        _canUpdateTargetPositionAndPath = true; //разрешение искать более ближнюю цель

        //–исует линию от граничной ноды до точки, куда будет пытатьс¤ следовать юнит
        Debug.DrawLine(_targetPositionPair.FollowPosition, _targetPositionPair.NearestBoundaryNodePosition, Color.blue);

        if (TargetIsExist())
        {
            Vector3 performerPos = _performer.transform.position;

            Vector3 closestPoint = _taskData.Target.collider.ClosestPointOnBounds(performerPos);
            float   distance     = Vector3.Distance(closestPoint, performerPos);

            if (distance <= _performer.AttackDistance) //если юнит на дистанции атаки
            {
                _canUpdateTargetPositionAndPath = false;
                _performer.Attack(_taskData.Target, _targetPositionPair);
            }
            else
            {
                if (_path != null)
                {
                    //если юнит находитс¤ в ноде _targetPositionPair.FollowPosition, то следовать к NearestBoundaryNodePosition(к центру ближайшей граничной ноде цели), а не к _path.vectorPath[_currentWaypoint]
                    Vector3 currentWaypoint = _path.vectorPath[_currentWaypointIndex];
                    Vector3 endWaypoint     = _path.vectorPath[_path.vectorPath.Length - 1];
                    if (AstarPath.active.GetNearest(endWaypoint).node.GetNodeIndex() == AstarPath.active.GetNearest(performerPos).node.GetNodeIndex())
                    {
                        if (Vector3.Distance(endWaypoint, performerPos) < GameManager.HalfNodeSizeSqrt)
                        {
                            currentWaypoint = _targetPositionPair.NearestBoundaryNodePosition;
                        }
                    }

                    //поворот и перемещение к текущей Waypoint
                    _performer.RotateAndMove(ref _currentWaypointIndex, currentWaypoint, _path);
                }
                else  //если пути нет
                {
                    _performer.UnitAnimation.State = UnitAnimation.States.Idle;
                }
            }
        }
        else //если цели нет
        {
            _performer.UnitAnimation.State = UnitAnimation.States.Idle;
            CompleteTask();
        }
    }
    void FixedUpdate()
    {
        _canUpdateTargetAndPath = true; //разрешение искать более ближнюю цель

        //Рисует линию от граничной ноды до точки, куда будет следовать юнит
        Debug.DrawLine(_targetPositionPair.FollowPosition, _targetPositionPair.NearestBoundaryNodePosition, Color.blue);

        if (TargetIsExist())
        {
            Vector3 performerPos = _performer.transform.position;

            Vector3 closestPoint = _target.collider.ClosestPointOnBounds(performerPos);
            float   distance     = Vector3.Distance(closestPoint, performerPos);

            if (distance <= _performer.VisionDistance)
            {
                if (distance <= _performer.AttackDistance) //если юнит на дистанции атаки
                {
                    _canUpdateTargetAndPath = false;
                    _performer.Attack(_target, _targetPositionPair);
                }
                else
                {
                    if (_path != null)
                    {
                        //если юнит находится в ноде _targetPositionPair.FollowPosition, то следовать к NearestBoundaryNodePosition(к центру ближайшей граничной ноды цели), а не к _path.vectorPath[_currentWaypoint]
                        Vector3 currentWaypoint = _path.vectorPath[_currentWaypointIndex];
                        Vector3 endWaypoint     = _path.vectorPath[_path.vectorPath.Length - 1];
                        if (AstarPath.active.GetNearest(endWaypoint).node.GetNodeIndex() == AstarPath.active.GetNearest(performerPos).node.GetNodeIndex())
                        {
                            if (Vector3.Distance(endWaypoint, performerPos) < GameManager.HalfNodeSizeSqrt)
                            {
                                currentWaypoint = _targetPositionPair.NearestBoundaryNodePosition;
                            }
                        }

                        //поворот и перемещение к текущей Waypoint
                        _performer.RotateAndMove(ref _currentWaypointIndex, currentWaypoint, _path);
                    }
                    else  //если пути нет
                    {
                        _performer.UnitAnimation.State = UnitAnimation.States.Idle;
                    }
                }
            }
            else //если цель вне радиуса видимости юнита, то прекращаем следовать за ней
            {
                ClearTemporaryVariables();
                _target = null;
                _performer.UnitAnimation.State = UnitAnimation.States.Idle;
            }
        }
    }