Nano Hash - криптовалюты, майнинг, программирование

Пункт назначения агента Unity Nav Mesh недействителен?

Имея проблему, я думаю, что знаю, почему это происходит, но не знаю, как правильно решить проблему.

Мой агент Nav Mesh выбирает случайную точку в круге и идет к ней в течение случайного промежутка времени, когда позиция действительна, она выглядит нормально. введите здесь описание изображения

Но время от времени агент выбирает место, до которого он не может дойти, и просто стоит там в течение отведенного ему времени, а затем выбирает другое и снова движется, пока он не может пройти, и это происходит.

введите здесь описание изображения

Я знаю, что причина, по которой он не движется, заключается в том, что путь недействителен (или, по крайней мере, я думаю, что именно поэтому).

Но я пытался реализовать что-то подобное, но безуспешно.

private void moveTowardsWaypoint()
    {
        agent.ResetPath();
        Vector3 newPosition = new Vector3(randomDirection.x, 0,        randomDirection.y) + transform.position;
        NavMeshPath path = new NavMeshPath();
        Debug.Log(agent.CalculatePath(newPosition, path));
        if(agent.CalculatePath(newPosition, path) == false)
        {

            agent.ResetPath();
            StopCoroutine(walkTime());
            pickWayPoint();
        }
        else
        {
            agent.SetDestination(newPosition);
        }

    }

Ответы:


1

Если вы сомневаетесь, как лучше всего манипулировать компонентами Unity, почему бы не проконсультироваться с их Документация по API?

Вы можете проверить, находится ли позиция в мире (например, ваша случайная точка разброса) в NavMesh с помощью такой проверки: NavMesh.Raycast(point, point, out navHit)

Это попытка отследить raycast от позиции 'point' к самой себе, возвращая false, если NavMesh не сгенерирован, точка находится ниже сетки или слишком высоко над ней.

Затем вы можете найти ближайшее ребро к этой точке с помощью следующего: NavMesh.FindClosestEdge(point, out navHit)

Если найдено значение true, ближайшее ребро найдено, действительная позиция путевой точки будет сохранена в navHit.position.


Если судить по вашим диаграммам, похоже, что у вас есть некоторые области NavMesh, которые не связаны с областью, в которой находится ваш агент.

Вы должны рассмотреть либо:

  • Не позволяйте этим несвязанным областям создавать NavMesh.
  • Соедините эти области с остальной частью NavMesh через OffMeshLinks.
  • Рассмотрите возможность дополнительной обработки для NavMesh.FindClosestEdge(), например добавления дополнительного шага, который создает путь, чтобы проверить, находятся ли исходная и конечная точки в одной и той же сетке. Если это не так (и путь недействителен), некоторые дополнительные шаги, такие как перемещение точки и повторное тестирование, пока не будет найден правильный путь.
15.03.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..