NavMeshBoundVolume를 AI주변으로만 동적으로 세팅하도록 만들어주는 기능. 꼭 AI가 아니라도 Navigation Invoker Component를 가진 액터라면 모두 적용가능하다. 왜 동적으로 해야하냐? 거대한 레벨을 전부 navMeshVolume을 깔기에는 쓰지도 않는 부분까지 계산해야하기에 비효율적이기 때문.
.h 세팅코드
UPROPERTY(BlueprintReadWrite, Category = Navigation, meta = (AllowPrivateAccess = "true"))
UNavigationInvokerComponent* NavInvoker;
/** 네비게이션 메시 생성 반경 */
float NavGenerationRadius;
/** 네비게이션 메시 제거 반경 */
float NavRemovalRadius;
FORCEINLINE class UNavigationInvokerComponent* GetNavInvoker() const { return NavInvoker; }
.cpp 세팅코드
// 활성화될 범위 설정. 테스트를 위해 매우 작은 값 부여.
NavGenerationRadius = 10.0f;
NavRemovalRadius = 15.0f;
// Navigation Invoker 컴포넌트 생성 및 초기값 셋업.
NavInvoker = CreateDefaultSubobject<UNavigationInvokerComponent>(TEXT("NavInvoker"));
// SetGenerationRadii 함수를 사용하여 생성 반경과 제거 반경 설정. Protected 멤버변수이므로 함수를 통해 수정 필요.
NavInvoker->SetGenerationRadii(NavGenerationRadius, NavRemovalRadius);
Build.cs에 NavigationSystem을 추가.
PublicDependencyModuleNames.AddRange(new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EnhancedInput",
"NavigationSystem" // 여기 NavigationSystem 모듈 추가!
});
Project Setting -> Navigation System -> Runtime Generation -> Dynamic
// -> Navigation Enforcing -> Invoker Check
'UE5' 카테고리의 다른 글
언리얼 Monster AI 구현(4): 통신 (0) | 2025.04.22 |
---|---|
언리얼 Monster AI 구현(3): Animation (0) | 2025.04.22 |
언리얼 Monster AI구현(2): Behavior Tree (0) | 2025.04.15 |
언리얼 Monster AI 구현(1): 전투 (0) | 2025.04.15 |
C++ Behavior Tree (0) | 2025.04.08 |