Почему NavMeshAgent.remainingDistance возвращает значения Infinity, а затем число с плавающей запятой в Unity для недоступных пунктов назначения? - PullRequest
1 голос
/ 25 апреля 2020

Когда я устанавливаю недоступную целевую позицию с помощью SetDestination() для моего NavMeshAgent и Debug.Log() NavMeshAgent.remainingDistance для каждого кадра, я получаю Infinity для некоторого пути, пока он не начнет возвращать значения с плавающей точкой (21.21864, 21.0846, 20.95449. ..) до тех пор, пока он не приблизится к месту назначения, насколько это возможно, что вернет 0.

1 Ответ

1 голос
/ 27 апреля 2020

Начиная с Unity 2019.3, NavMeshAgent.remainingDistance все еще рассчитывается только после того, как достигнут предпоследний угол пути, и агент пересекает последний сегмент. До этого оставшееся расстояние будет возвращать бесконечность. К сожалению, это недокументировано.

Вот метод расширения NavMeshAgent для получения оставшегося расстояния в любой момент или в любой точке пути:

public static class ExtensionMethods
{
    public static float GetPathRemainingDistance(this NavMeshAgent navMeshAgent)
    {
        if (navMeshAgent.pathPending ||
            navMeshAgent.pathStatus == NavMeshPathStatus.PathInvalid ||
            navMeshAgent.path.corners.Length == 0)
            return -1f;

        float distance = 0.0f;
        for (int i = 0; i < navMeshAgent.path.corners.Length - 1; ++i)
        {
            distance += Vector3.Distance(navMeshAgent.path.corners[i], navMeshAgent.path.corners[i + 1]);
        }

        return distance;
    }
}

Поэтому вместо использования NavMeshAgent.remainingDistance Вы можете использовать NavMeshAgent.GetPathRemainingDistance (). Имейте в виду, что в зависимости от ситуации это может стоить производительности, поэтому имейте это в виду при ее использовании.

Что касается второй части вашего вопроса, нам потребуется больше контекстной информации о вашей настройке, но звучит как ваша целевая позиция может иметь смещение в сторону восходящего вектора, в то время как агент ограничен плоскостью x, z, но это только предположение.

...