Nav Mesh Agent - скольжение агентов

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Nav Mesh Agent - скольжение агентов

Сообщение TonyMax 26 июн 2016, 12:44

По нажатию правой кнопки мыши, если щелчок произошел по terrain - ставится префаб флага и всем выделенным юнитам производится команда agent.SetDestination(targetPosition);
Если я правильно понял, то даже по достижению targetPosition объект все равно считает эти координаты своей целью, пока ему не будут переданы другие, неистово стараясь добраться до цели. Для этого предусмотрены команды agent.Stop() и agent.Resume()
Так вот в update() я проверяю
Синтаксис:
Используется csharp
if (agent.remainingDistance <= agent.stoppingDistance && agent.remainingDistance !=0) {
            Debug.Log(agent.remainingDistance);
            agent.Stop();
            body.velocity = Vector3.zero;
        }

если расстояние до цели меньше или равно расстоянию остановки (объект добрался до цели) - то остановить его. Также я попробовал прописать body.velocity = Vector3.zero; в попытках полностью прекратить движение объекта.
Собственно проблема в том, что при всем этом юниты все равно, пусть немного, но меняют свое положение по осям X,Z.
Может, кто-то сталкивался с этой проблемой, или просто скажет мне в чем я дурак.

P.S. физический материал с вменяемым трением прописывать пробовал - вообще ничего не меняется.
P.S.S а еще иногда объекты в попытках пройти к цели начинают с огромной скоростью летать по карте, и я совсем не понимаю в чем триггер этого бага
TonyMax
UNец
 
Сообщения: 40
Зарегистрирован: 23 июн 2016, 14:54

Re: Nav Mesh Agent - скольжение агентов

Сообщение Splurgeola 26 июн 2016, 16:26

не уверен, но
SetDestination(Vector3.zero)
проверь.
ну или targetPosition = vector3.zero
Splurgeola
UNец
 
Сообщения: 47
Зарегистрирован: 24 янв 2016, 08:53
Откуда: Кемерово
Skype: sab0tag31
  • Сайт

Re: Nav Mesh Agent - скольжение агентов

Сообщение TonyMax 26 июн 2016, 16:59

не уверен, но
SetDestination(Vector3.zero)
проверь.
ну или targetPosition = vector3.zero


Vecor3.zero возвращает Vector3(0,0,0). Юнит пойдет в точку 0.0.0 на карте. (я даже на всякий случай проверил, ибо несложно это).

Кстати, если писать stop(), когда объект достигает необходимого расстояния до точки, и писать resume(), когда назначается новая позиция, то иногда, судя по поведению юнита, stop() срабатывает сразу после добавления новой цели. Даже если ввести bool переменную отвечающую за то двигается ли объект или нет а затем изменить условие на
Синтаксис:
Используется csharp
if (agent.remainingDistance <= agent.stoppingDistance && IsMoving) {

то stop все равно срабатывает сразу после нового targetPosition, видимо потому что agent.remainingDistance не успевает посчитаться.
TonyMax
UNец
 
Сообщения: 40
Зарегистрирован: 23 июн 2016, 14:54

Re: Nav Mesh Agent - скольжение агентов

Сообщение Cr0c 26 июн 2016, 17:02

https://docs.unity3d.com/ScriptReferenc ... tance.html
Должен сам останавливать агента. Может этот параметр слишком мал?
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Nav Mesh Agent - скольжение агентов

Сообщение TonyMax 26 июн 2016, 17:11

https://docs.unity3d.com/ScriptReferenc ... tance.html
Должен сам останавливать агента. Может этот параметр слишком мал?

Агент действительно останавливается, но зачастую дергается на месте и скользит в произвольную сторону.
Я попробовал откинуть его от цели в момент работы и он начал опять к ней двигаться, то есть действие setDestination(Vector3) не заканчивается
TonyMax
UNец
 
Сообщения: 40
Зарегистрирован: 23 июн 2016, 14:54

Re: Nav Mesh Agent - скольжение агентов

Сообщение Cr0c 26 июн 2016, 18:05

Отключать компонент агента при достижении точки.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Nav Mesh Agent - скольжение агентов

Сообщение TonyMax 26 июн 2016, 19:45

Отключать компонент агента при достижении точки.


Благодарю за идею.

Сходил проверил, как будет работать. Итоги:
- Объект отключает агента, останавливается и начинает вменяемо реагировать на физику, что просто отлично
- Объект падает и подпрыгивает, что, скорее всего, вызвано некоторым расстоянием между его BoxCollider и коллайдером от агента, который заставляет объект как бы немного парить над землей (что видимо и объясняет "скольжение"). Иногда объект вообще проваливается под Terrain.
- Другие агенты, будучи в движении полностью игнорируют объект с выключенным NavMeshAgent.

Возможные решения:
- Чтобы "подпрыгивание" было наименее заметным можно подогнать размер BoxCollider под размер итогового коллайдера агента. Но это смахивает на жирный костыль. К тому же он не решает проблему проваливания под Terrain.
- Чтобы объект не проваливался под Terrain, если я не ошибаюсь, можно включить усиленный просчет столкновений (забыл как называется), если таковой имеется вообще.
- Чтобы другие объекты не игнорировали нашего не действующего агента, можно так же включать и выключать ему NavMeshObstacle, если, конечно, оно будет так работать.

Вопрос: все ли я правильно понимаю и есть ли какие-нибудь более элегантные варианты решения возникших проблем?
TonyMax
UNец
 
Сообщения: 40
Зарегистрирован: 23 июн 2016, 14:54

Re: Nav Mesh Agent - скольжение агентов

Сообщение TonyMax 27 июн 2016, 02:00

После некоторого времени биения руками по клавиатуре и смотрения на результат выяснилось, что для NavMeshAgent не стоит включать RigidBody (либо включать с использованием isKinematic). Совместная работа агента и просчета действующих физических сил на объект приводит к тому, что он начинает контролироваться сразу несколькими компонентами.
TonyMax
UNец
 
Сообщения: 40
Зарегистрирован: 23 июн 2016, 14:54

Re: Nav Mesh Agent - скольжение агентов

Сообщение SuKioto 27 июн 2016, 02:32

в документации это все написано же.
http://docs.unity3d.com/Manual/nav-Mixi ... nents.html
SuKioto
UNIт
 
Сообщения: 86
Зарегистрирован: 21 июн 2016, 19:48

Re: Nav Mesh Agent - скольжение агентов

Сообщение TonyMax 28 июн 2016, 12:47

в документации это все написано же.
http://docs.unity3d.com/Manual/nav-Mixi ... nents.html


плохо смотрю документацию
TonyMax
UNец
 
Сообщения: 40
Зарегистрирован: 23 июн 2016, 14:54

Re: Nav Mesh Agent - скольжение агентов

Сообщение puermannias 15 май 2022, 09:03

Вопрос, можно ли как то прервать дивжения врага когда он еще идет, то есть на середине пути и остановить на некторое время, и после этого он пойдет дальше ?
puermannias
UNец
 
Сообщения: 1
Зарегистрирован: 15 май 2022, 09:01

Re: Nav Mesh Agent - скольжение агентов

Сообщение 1max1 15 май 2022, 10:06

В гугл вбиваешь "navmeshagent stop" и радуешься по первой ссылке.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

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

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