Перед мной возникла задача создать демку на Unreal Engine 5 с возможностью динамической генерации навигации для камеры и встроенной поддержкой загрузки файлов в формате документации, есть возможность использования плагина в режиме выполнения, просто установив флаг FORCE_ANSI_ALLOCATOR=1 в Project.Target.cs. Этот флаг заставляет использовать стандартный аллокатор вместо аллокатора документации.
Поскольку размер мира может изменяться и быть очень большим я задал сетке фиксированный размер и при достижении камерой конечной точки, позиция сетки обновляется до текущей позиции камеры. Это позволило избежать проблем с производительностью и обеспечило плавное перемещение камеры. Если сетка выходит за пределы мира, её ячейки, находящиеся за пределами, помечаются как препятствия, гарантируя, что камера останется в пределах уровня и не уйдет за его границы.
Для обозначения препятствий в местах пересечения границ актеров используется следующий алгоритм:
-
Сначала определяются ближайшие актеры, то есть те актеры, границы которых пересекаются с границами сетки.
-
Затем для каждого ближайшего актера проверяются его границы на предмет вхождения ячеек сетки и, если ячейка входит в эти границы, она отмечается как препятствие.
Этот подход позволяет избежать необходимости добавлять коллизии, чтобы предотвратить прохождение камеры сквозь актеров.
Так как USD Importer не поддерживает импорт коллизий и в случае с NavMesh пришлось добавлять коллизии и столкнуться с багом упомянутым выше. Отказ же от NavMesh в пользу FNavLocalGridData позволил избежать этих проблем и обеспечил более надежную и гибкую навигацию для камеры.
ссылка на оригинал статьи https://habr.com/ru/articles/773760/
Добавить комментарий