Что может заставить агент NavMesh вычислять недопустимый путь?
Описание проблемы
Я борюсь с моими агентами NavMesh, вычисляя недопустимый путь, пока нет obvisously причин. Проблема возникает время от времени, когда они уже перемещаются с исходным допустимым путем.
![Agent can't find his way]()
На приведенном выше изображении пунктом назначения является конус в верхнем левом углу. (Не обращайте внимания на стрелку направления NavMeshAgent, я пытался переместить агента вручную, чтобы попытаться "разблокировать" его).
- При создании экземпляра я прошу своих агентов вычислить свой путь к определенной точке назначения в NavMesh (я использую NavMesh.SamplePosition, чтобы убедиться, что точка назначения находится в NavMesh). Все работает нормально. Агент находит свой путь и начинает двигаться к своей цели.
- Но во время путешествия, потихоньку, он теряет себя, пока NavMesh не изменился с первого шага. Я ничего не спрашивал, никаких новых вычислений нового пути.
Проверенные решения
-
Проверено, что пункт назначения находится в NavMesh
public Vector3 GetCharacterPositionOnNavMesh( Vector3 position )
{
NavMeshHit hit;
bool positionFound = NavMesh.SamplePosition( position, out hit, 500, NavMesh.AllAreas );
if ( !positionFound )
Debug.LogWarning( "No valid position found !" );
return positionFound ? hit.position : position;
}
-
Проверял маску области моих агентов, чтобы убедиться, что они могут найти путь к месту назначения, несмотря на различные области NavMesh
-
Проверка почти каждого кадра, если путь к агенту недействителен. Если это так, вычислите новый, используя CalculatePath
или SetDestination
. Иногда это работает, иногда нет.
protected virtual void Update()
{
if ( !Running || !agent.enabled || !agent.isOnNavMesh )
return;
if ( !agent.pathPending && agent.path.status == NavMeshPathStatus.PathInvalid && Time.frameCount % 2 == 0 )
{
NavMeshPath path = new NavMeshPath();
agent.CalculatePath( CharactersManager.Instance.GetCharacterPositionOnNavMesh( finalDestination ), path );
agent.SetPath( path );
}
}
-
Отключение всего моего NavMeshObstacle на всей сцене (у моих агентов нет NavMeshObstacle на них или на их дочерних элементах)
-
Добавление дополнительных шагов между начальной и конечной точкой назначения
-
Отключено свойство AutoRepath свойства
-
Вычисление пути, сохранение всех corners и установка адресата моего агента по одному углу за раз, используя аналогичный метод этот
Примечание. Когда другой агент нажимает мой первый агент, последний, похоже, просыпается и находит свой путь.
Ответы
Ответ 1
У меня была одна и та же проблема. Когда-то назад мой агент только продолжал ухудшаться, формируя основной путь, как будто он получает новую информацию в движении,
Затем я проверил об этом и узнал, что он обновляет свой путь на ходу, всегда проверяя новое кратчайшее расстояние до конца, поскольку вы сказали, что отключили свойство Auto Path, я сделал то же самое, но без помощи.
Затем я придумал идею "Получить точки, по которым мой агент сначала начинает перемещаться в списке, и нарисовать свой собственный путь для переноса моего агента на
Вы можете получить очки от this
и после этого вам нужно плавно перевести ваш плеер\агент в эти точки, поскольку это будет самый короткий путь.
Но последнее, но не менее важное: преодоление препятствий может быть трудно преодолеть
если вы найдете эту помощь, полностью отдайте ее и расскажите, как это происходит.
его просто то, что я сделал в моем случае, подумал об обмене, было бы полезно.
Удачи
Отношения
Ответ 2
Недавно у меня была очень похожая проблема, когда мои агенты NavMesh застревали и обычно начинают вращаться, когда пункт назначения находится слишком близко к краю NavMesh. То, что фиксировало это для меня, было перемещение его от края наполовину радиуса агента, поэтому, когда он доберется до места назначения, он будет стоять прямо над ним.
Если это вам не поможет - вы можете попробовать warping
агента:
https://forum.unity.com/threads/agents-get-stuck-on-navmeshlink.503527/
https://forum.unity.com/threads/agent-getting-stuck-in-another-agent-when-walking-in-corners-what-is-the-right-solution.501824/
https://forum.unity.com/threads/strange-navmeshsurface-behavior.501453/
https://forum.unity.com/threads/failed-to-create-agent-because-it-is-not-close-enough-to-the-navmesh.500553/
https://forum.unity.com/threads/navmesh-link-does-not-connect-properly-in-runtime.473223/