NavMeshAgent.SetDestination слишком долго просчитывает путь

257
30 июля 2021, 10:00

Есть такой код

public Transform target;
void Update()
{
    if(input.GetKeyDown(KeyCode.F))
    {
        _agent.SetDestination(target.position);
    }
}

Но когда я нажимаю F, агент около 2-3 секунд высчитывает путь до цели. Если я передвину цель и нажму F еще раз - агент остановится и еще 2-3 секунды будет высчитывать новый курс до цели. Нагрузки особой на cpu в эти секунды нет, такое ощущение что он просто лениво считает с низким приоритетом. Как поднять скорость высчитывания или приоритет, или каким то иным образом избежать этих 2-3 секунд задежки перед действием?

Answer 1

Топаем в документацию:

Description

Sets or updates the destination thus triggering the calculation for a new path.

Note that the path may not become available until after a few frames later. While the path is being computed, pathPending will be true. If a valid path becomes available then the agent will resume movement.

Иными словами, SetDestionation ведет себя ровно так, как и задумывалось, т.е. просчитывает путь по запросу на, скорее всего, отдельном потоке, чтобы не затормаживать весь процесс.

Если нужно получить путь ровно за 1 кадр, то нужно использовать NavMeshAgent.CalculatePath и NavMeshAgent.SetPath:

public Transform target;
private NavMeshAgent agent;
void Start() {...}
void Update()
{
    if(input.GetKeyDown(KeyCode.F))
    {
        NavMeshPath path = new NavMeshPath();
        agent.CalculatePath(target.position, path);
        if (path.status == NavMeshPathStatus.PathComplete)
        {
            agent.SetPath(path);
        }
    }
}
READ ALSO
Блокируется форма после вызова функции метода

Блокируется форма после вызова функции метода

У меня есть код такого рода:

229
Триггер MySQL AFTER UPDATE срабатывает при вставке записи в таблицу

Триггер MySQL AFTER UPDATE срабатывает при вставке записи в таблицу

Почему AFTER UPDATE триггер срабатывает при вставке новой записи в таблицу?

202
Проблема с mysql connect() и end() (node JS)

Проблема с mysql connect() и end() (node JS)

Сегодня весь вечер пытался решить дурацкую проблему с закрытием соединенияЕсть функция, которая запускается через setInterval (код будет ниже)

213
Сортировка по дате из строки. MySQL

Сортировка по дате из строки. MySQL

В таблице есть поле "Номер фактуры" вида AB/dd/mm/yyyy

140