Есть такой код
public Transform target;
void Update()
{
if(input.GetKeyDown(KeyCode.F))
{
_agent.SetDestination(target.position);
}
}
Но когда я нажимаю F, агент около 2-3 секунд высчитывает путь до цели. Если я передвину цель и нажму F еще раз - агент остановится и еще 2-3 секунды будет высчитывать новый курс до цели. Нагрузки особой на cpu в эти секунды нет, такое ощущение что он просто лениво считает с низким приоритетом. Как поднять скорость высчитывания или приоритет, или каким то иным образом избежать этих 2-3 секунд задежки перед действием?
Топаем в документацию:
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);
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Почему AFTER UPDATE триггер срабатывает при вставке новой записи в таблицу?
Сегодня весь вечер пытался решить дурацкую проблему с закрытием соединенияЕсть функция, которая запускается через setInterval (код будет ниже)