Этот вопрос конкретно о работе с библиотекой Recast Navigation.
Я добавил агента с addAgent
и установил его цель с requestMoveTarget
. Когда агент достигает своего места назначения, он останавливается, но когда его отталкивает (другой агент), он пытается вернуться к своей цели. Вместо этого, нужно, чтобы он остановился и стал бездействующим, чтобы, когда другой агент прошел мимо, отодвинул его в сторону, и он не вернулся обратно.
Я пытался дозвониться resetMoveTarget
по agent.npos
близости к agent.targetPos
(как если агент достиг своего назначения), но кажется , что нарушить внутреннюю логику симуляции толпы - агент будет просто продолжать идти в старом направлении, не останавливаясь.
Как правильно сказать агенту, чтобы он прекратил работу и стал бездействующим (хотя и нереальным) в RecastNavigation?
источник
resetMoveTarget
локально, но я не вижу разницы.ag->corridor.reset(ag->corridor.getFirstPoly(), agent->npos);
Я не уверен, но мое предположение должно было бы вызвать "requestMoveVelocity" с нулевым вектором также на этом агенте. Попробуйте.
источник
Примечание. Это решение кажется излишним, но я оставляю его на случай, если проблема появится снова.
После многих расшифровок, проб и ошибок я взял
dtCrowd.resetMoveTarget
за основу и нашел способ ее изменить:PS Выше код находится в Delphi, но он должен работать так же хорошо в C ++.
Recast Навигация автор прокомментировал:
источник