Кастомная навигация в Unreal Engine 5 и USD импорт файлов

от автора

Перед мной возникла задача создать демку на Unreal Engine 5 с возможностью динамической генерации навигации для камеры и встроенной поддержкой загрузки файлов в формате документации, есть возможность использования плагина в режиме выполнения, просто установив флаг FORCE_ANSI_ALLOCATOR=1 в Project.Target.cs. Этот флаг заставляет использовать стандартный аллокатор вместо аллокатора документации.

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

Для обозначения препятствий в местах пересечения границ актеров используется следующий алгоритм:

  1. Сначала определяются ближайшие актеры, то есть те актеры, границы которых пересекаются с границами сетки.

  2. Затем для каждого ближайшего актера проверяются его границы на предмет вхождения ячеек сетки и, если ячейка входит в эти границы, она отмечается как препятствие.

Этот подход позволяет избежать необходимости добавлять коллизии, чтобы предотвратить прохождение камеры сквозь актеров.

Так как USD Importer не поддерживает импорт коллизий и в случае с NavMesh пришлось добавлять коллизии и столкнуться с багом упомянутым выше. Отказ же от NavMesh в пользу FNavLocalGridData позволил избежать этих проблем и обеспечил более надежную и гибкую навигацию для камеры.


ссылка на оригинал статьи https://habr.com/ru/articles/773760/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *