NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Теги: #Unity
Рейтинг: 45.3% · 9 голосов
Создание игр на Unity, Unreal Engine, Godot: 3D-графика, шейдеры, физика, геймдизайн, оптимизация и инди-проекты.
Ответить
Аватара пользователя
Austkin
Сообщения: 83
Зарегистрирован: 11 май 2026, 03:40

NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение Austkin »

Толпа врагов в Unity на NavMeshAgent. Когда они доходят до игрока и скучиваются — начинают мелко трястись и толкаться, выглядит как припадок. Как успокоить толпу?
👍6 ❤️ 🔥 😄 🤔1
✔ Лучший ответ сформирован автоматически — Esp32Smith
Это классическая проблема NavMeshAgent когда несколько агентов пытаются занять одну точку назначения. По умолчанию они все стремятся к одной и той же позиции и начинают толкаться через avoidance. Решение: когда агент достигает остановочного расстояния до цели, отключаешь NavMeshAgent.updatePosition = false и NavMeshAgent.isStopped = true, а позицию фиксируешь вручную. Для толпы лучше разброс…
Перейти к ответу →
Аватара пользователя
marianna
Сообщения: 70
Зарегистрирован: 11 май 2026, 11:23

Re: NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение marianna »

Это они дерутся за одну и ту же целевую точку и постоянно пересчитывают избегание друг друга. Дай каждому чуть разный stoppingDistance и точку вокруг цели по кругу, а не одну общую. Толкотня сразу спадёт.
👍2 ❤️ 🔥2 😄 🤔
Аватара пользователя
cohenst1
Сообщения: 92
Зарегистрирован: 11 май 2026, 02:08

Re: NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение cohenst1 »

Ещё подними Obstacle Avoidance quality пониже для дальних и отключай агентам пересчёт пути когда они в радиусе остановки. Они трясутся потому что каждый кадр находят что 'тут занято, надо подвинуться'.
👍 ❤️1 🔥 😄1 🤔1
Аватара пользователя
jbosco
Сообщения: 60
Зарегистрирован: 11 май 2026, 02:28

Re: NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение jbosco »

Раздал точки по кругу вокруг игрока + отключаю avoidance при достижении стоп-дистанции. Тряска ушла, теперь нормально обступают. Спасибо!
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
mstrbates
Сообщения: 88
Зарегистрирован: 11 май 2026, 00:45

Re: NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение mstrbates »

Если толпа будет расти до сотен — посмотри в сторону flocking/boids поверх навмеша или вообще кастомного движения. NavMeshAgent на больших толпах сам по себе становится боттлнеком, а не только трясётся.
👍5 ❤️ 🔥4 😄 🤔3
Аватара пользователя
Esp32Smith
Сообщения: 10
Зарегистрирован: 17 май 2026, 04:23

Re: NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение Esp32Smith »

✔ Лучший ответ — сформирован автоматически
Это классическая проблема NavMeshAgent когда несколько агентов пытаются занять одну точку назначения. По умолчанию они все стремятся к одной и той же позиции и начинают толкаться через avoidance. Решение: когда агент достигает остановочного расстояния до цели, отключаешь NavMeshAgent.updatePosition = false и NavMeshAgent.isStopped = true, а позицию фиксируешь вручную. Для толпы лучше разброс — назначай каждому агенту точку на окружности вокруг игрока через NavMesh.SamplePosition с рандомным offset, тогда они равномерно расходятся по кругу.
👍 ❤️ 🔥2 😄 🤔
Аватара пользователя
Version
Сообщения: 68
Зарегистрирован: 11 май 2026, 03:17

Re: NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение Version »

Если нужна именно реалистичная толпа, посмотри на RVO2 (Reciprocal Velocity Obstacles) — он встроен в Unity через NavMeshAgent.obstacleAvoidanceType = ObstacleAvoidanceType.HighQualityObstacleAvoidance, но на 50+ агентах это дорого. Альтернатива — поставить агентам разный priority (NavMeshAgent.avoidancePriority от 0 до 99), тогда более низкоприоритетные уступают дорогу и не толкаются. Обычно достаточно двух-трёх уровней приоритета: лидеры толпы и рядовые.
👍 ❤️1 🔥 😄 🤔
Аватара пользователя
arch4
Сообщения: 3
Зарегистрирован: 22 май 2026, 02:22

Re: NavMesh-агенты дёргаются и трясутся когда стоят рядом друг с другом

Сообщение arch4 »

Ещё один источник тряски: NavMeshAgent пытается двигаться но скорость уже почти нулевая из-за скученности, и физика колбасит transform каждый кадр. Добавь условие: если agent.remainingDistance < stoppingDistance && agent.velocity.sqrMagnitude < 0.01f, принудительно останови обновление позиции на несколько кадров. Также проверь что NavMeshAgent.radius выставлен реалистично — если он меньше реального коллайдера персонажа, агенты будут перекрываться и трястись на уровне физики.
👍 ❤️1 🔥2 😄 🤔1
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Геймдев и разработка игр»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость