NavMeshBoundVolume

주상돈·2025년 5월 9일

TIL

목록 보기
53/53

1. NavMeshBoundsVolume이란?

  • AI 이동 가능 영역을 지정하는 볼륨.
  • 레벨에 배치하면 해당 영역 내부에 내비게이션 메시(NavMesh) 가 자동 생성되고, AI 는 그 범위만 탐색.

2. 기본 사용법

  1. Place Actors 패널에서 NavMeshBoundsVolume 검색 → 레벨에 드래그.
  2. R 키(Scale)로 크기를 조절해 AI 가 돌아다닐 공간을 전부 포함.
  3. P(영문 키보드) : NavMesh 시각화 토글.

3. Runtime Generation 모드

모드특징
Static에디터에서 한 번 굽고 런타임엔 변경 X
Dynamic런타임 중 지형 변동 시 추가·재생성 모두 가능
Dynamic Modifiers Only기존 Mesh에서 “빼기”(감산)만 가능. 성능 절약

Edit ▸ Project Settings ▸ Navigation MeshRuntime Generation 변경

4. Navigation Invoker 로 동적 NavMesh

런타임에 볼륨을 새로 생성하는 대신 Invoker 컴포넌트를 단 액터 주변만 타일을 계산

4-1. 코드 스니펫

// 헤더
#include "NavigationInvokerComponent.h"

float NavGenerationRadius = 3000.f;
float NavRemovalRadius   = 3500.f;

NavInvoker = CreateDefaultSubobject<UNavigationInvokerComponent>(TEXT("NavInvoker"));
NavInvoker->SetGenerationRadii(NavGenerationRadius, NavRemovalRadius);

4-2. 빌드 / 프로젝트 세팅

항목위치
Build.csPublicDependencyModuleNames.Add("NavigationSystem");프로젝트 모듈(Build.cs)
Runtime GenerationDynamicProject Settings ▸ Engine ▸ Navigation Mesh
Generate Navigation Only Around Navigation InvokerstrueProject Settings ▸ Engine ▸ Navigation System

빌드 시 NavigationSystem 모듈이 없으면 UNavigationInvokerComponent 를 찾지 못해 컴파일 에러가 발생하므로 반드시 추가!


5. 테스트 결과

  • 인보커를 단 BP_AINPC 주변에서만 초록색 NavMesh 타일이 실시간 생성 / 제거.
  • 멀리 떨어진 지역은 내비 타일이 사라져 CPU & 메모리 사용량 대폭 절감.
  • 대형 오픈월드에서도 플레이어 근처 경로 탐색만 계산되므로 프레임 드랍이 없음.

💡 배운 점 정리

  1. NavMeshBoundsVolume은 런타임에 Scale 변경으로는 타일 재계산이 안 된다.
  2. Navigation Invoker + Dynamic 모드가 사실상의 “동적 NavMesh” 솔루션.
  3. Dynamic Modifiers Only 모드는 추가 타일 생성은 막고, 장애물 감산만 처리 → 비용을 더 낮게 유지할 수 있다.
  4. 성능 최적화를 위해서는
    • 생성 반경은 AI 이동 속도 기준 최소값으로,
    • 제거 반경은 생성 반경보다 약간 크게 설정하는 것이 베스트.

0개의 댓글