내비게이션 시스템을 통한 기본 AI 이동
NavMesh Bounds Volume을 설정하고 AI Move To로 목표까지 경로를 탐색하며 이동 실패를 시각적으로 진단합니다.
지난 절에서는 비헤이비어 트리와 EQS로 AI가 무엇을 할지와 어디서 할지를 결정하는 방법을 배웠습니다.
이제는 결정한 목표 위치로 어떻게 이동할지를 해결해야 합니다.
언리얼 엔진은 이를 위해 AI 경로 탐색용 내비게이션 시스템(Navigation System)을 제공합니다.
이번 절에서는 내비게이션 시스템, 특히 내비메시(NavMesh)의 기본 개념과 AI 이동 활용법을 정리합니다.
내비게이션 시스템과 내비메시란 무엇인가?
내비게이션 시스템(Navigation System)은 AI가 게임 세계에서 장애물을 피하고 목표 지점까지 최적의 경로를 찾아 이동할 수 있도록 지원하는 기능들의 집합입니다.
이 시스템의 핵심은 바로 내비메시(NavMesh)입니다.
내비메시(Navigation Mesh) 기본 Recast NavMesh는 에이전트가 걸을 수 있는 표면을 폴리곤으로 나타냅니다. 자유로운 3차원 비행 공간 전체를 표현하는 체적 메시는 아닙니다.
언리얼 엔진은 레벨에 배치된 지오메트리(바닥, 벽, 오브젝트 등)를 분석하여 AI가 걸어 다닐 수 있는 영역을 자동으로 계산하고, 이 영역을 녹색으로 표시되는 메시 형태로 생성합니다.
이 절의 지상 경로 탐색은 NavMesh를 사용합니다. 직접 이동·비행·커스텀 경로 탐색까지 모두 이 제약을 받는다는 뜻은 아닙니다.
내비메시가 필요한 이유- 경로 탐색 (Pathfinding): AI가 복잡한 환경에서 장애물을 피하고 목표까지 가장 효율적인 경로를 계산할 수 있게 합니다.
- 성능 최적화: AI가 이동 가능한 영역만 미리 계산해두므로, 런타임에 매번 복잡한 지오메트리 계산을 할 필요 없이 빠르게 경로를 찾을 수 있습니다.
- 현실적인 이동: 이동 가능한 경로를 제공합니다. 벽 충돌과 실제 이동은 Pawn의 충돌·Movement 설정도 함께 맞아야 합니다.
- 유연성: 높이·경사 제한을 설정하고, 분리된 표면 사이는 Navigation Link와 해당 이동 동작 구현을 연결할 수 있습니다.
내비메시 생성 및 설정
내비메시는 기본적으로 프로젝트에 내비게이션 시스템이 활성화되어 있다면 자동으로 생성됩니다.
편집(Edit)>프로젝트 세팅(Project Settings)>엔진(Engine)>내비게이션 시스템(Navigation System)으로 이동합니다.- 내비게이션 시스템과 필요한 Supported Agent 설정을 확인합니다. 에디터 자동 갱신을 껐다면 내비게이션 데이터를 별도로 빌드합니다.
플레이스 액터(Place Actors)패널에서볼륨(Volumes)섹션으로 이동합니다.Nav Mesh Bounds Volume을 레벨에 드래그 앤 드롭하여 배치합니다.- 이 볼륨의 크기를 조절하여 AI가 이동할 수 있는 모든 영역을 포함하도록 합니다.
- 볼륨을 배치하면 자동으로 내비메시가 계산되어 녹색으로 표시됩니다.
- Tip:
P키를 누르면 내비메시를 토글하여 켜고 끌 수 있습니다.
- Bounds Volume은 생성 범위를 정합니다. 에이전트·생성 속성은 Project Settings의
Navigation Mesh/Navigation System과 해당RecastNavMesh설정에서 확인합니다.Agent Radius: AI 캐릭터의 반지름. 이 값보다 좁은 통로는 내비메시에서 제외됩니다.Agent Height: AI 캐릭터의 높이. 이 값보다 낮은 천장은 내비메시에서 제외됩니다.Agent Max Slope: AI가 오를 수 있는 최대 경사각. 이 각도보다 가파른 경사는 내비메시에서 제외됩니다.Agent Max Step Height: AI가 오를 수 있는 최대 계단 높이. 이 높이보다 높은 계단은 내비메시에서 점프나 다른 특별한 이동 액션 없이는 이동 불가능한 것으로 간주됩니다.- 이 값들을 AI 캐릭터의 크기와 이동 능력에 맞게 조정해야 합니다.
- 설정을 변경하면 내비메시가 자동으로 다시 계산됩니다.
AI 이동 구현: Move To 노드
비헤이비어 트리에서 AI를 이동시키는 가장 기본적인 태스크 노드는 Move To입니다.
이 노드는 내비메시를 사용하여 목표 지점까지의 경로를 찾아 AI를 이동시킵니다.
Move To 태스크 노드 사용법
비헤이비어 트리 열기: AI의 비헤이비어 트리(BT_EnemyAI)를 엽니다.
Move To 태스크 노드 추가- 비헤이비어 트리의 태스크 노드를 추가할 위치(예:
Sequence노드의 자식)에Move To노드를 배치합니다.
Move To노드를 선택하고디테일(Details)패널에서Blackboard Key를 설정합니다.- 이
Blackboard Key는 AI가 이동할 목표 위치를 담고 있는 블랙보드 키여야 합니다. -
예시
TargetLocation(Vector 타입): 특정 월드 좌표로 이동할 때 사용합니다.TargetActor(Object/Actor 타입): 특정 액터(예: 플레이어)에게 이동할 때 사용합니다. 이 경우 AI는 해당 액터의 위치로 이동합니다.
Acceptable Radius: AI가 목표 지점에 얼마나 가까이 도달해야 도착으로 간주할지 설정합니다. 이 반경 내에 들어오면Move To태스크는 성공으로 간주됩니다.- 도착 판정의 크기 포함 옵션: BT
Move To의Reach Test Includes Agent Radius/Goal Radius는 도착 판정에 에이전트·목표 반지름을 더할지 정합니다. 별도AI Move To의Stop On Overlap도 단순한 정지 on/off가 아니라 도착 판정의 반지름 포함과 관련된 옵션입니다. Allow Partial Path: 목표 지점까지 완전한 경로를 찾지 못하더라도 부분적인 경로라도 따라 이동할지 여부를 설정합니다.Observe BlackBoard Value:Blackboard Key의 값이 변경될 때Move To태스크를 다시 시작할지 여부를 설정합니다. (예: 플레이어의 위치가 계속 변할 때 추적)
컴파일 및 저장합니다.
Root
|
Selector (플레이어가 보이는가? -> 공격 / 아니면 순찰)
|
+--- Sequence (플레이어 추적 및 공격)
| |
| +--- Decorator: Blackboard Based Condition (플레이어가 보이는가?)
| | (블랙보드 키: TargetActor, 조건: Not Set == false)
| +--- Service: Update Player Location (현재 유효한 플레이어 Actor 참조를 TargetActor에 저장)
| |
| +--- Task: Move To (Blackboard Key: TargetActor, Acceptable Radius: 150)
| | (도착 반경 150; Agent/Goal Radius 포함 설정도 함께 확인)
| +--- Task: Attack Player (커스텀 태스크)
|
+--- Sequence (순찰)
|
+--- Task: Find Random Location (블랙보드에 RandomLocation 저장)
+--- Task: Move To (Blackboard Key: RandomLocation)
+--- Task: Wait (5초 대기)Decorator와 Service는 자식 실행 태스크가 아니라 해당 Sequence에 붙이는 요소입니다. TargetActor Is Set은 참조 존재만 확인하며 현재 시야를 보장하지 않습니다. 감지는 다음 절의 Perception과 연결하고, 진행 중 행동을 바꿔야 하면 Observer Aborts를 설정합니다.
이 예시에서 Move To 노드는 TargetActor (플레이어) 또는 RandomLocation (순찰 지점)으로 AI를 이동시킵니다.
이 예제에서 유효한 NavMesh 경로가 없으면 이동 실패를 처리해야 합니다. 도착 판정·부분 경로 허용·직접 이동 등 다른 설정까지 항상 같은 결과라는 뜻은 아닙니다.
내비게이션 시스템의 고급 활용 (선택 사항)
- 내비게이션 링크 (Navigation Links): AI가 점프, 클라이밍, 특정 오브젝트와의 상호작용을 통해 이동할 수 있는 경로를 수동으로 지정할 때 사용합니다. (예: 절벽 사이를 점프하거나 사다리를 오르는 경로)
- 런타임 생성 정책: RecastNavMesh의 Runtime Generation을 환경에 맞게 설정합니다. 동적 지오메트리 재생성과 Dynamic Modifiers Only의 범위는 다르며, Recast를 사용한다고 모든 변경이 자동 반영되지는 않습니다.
- 내비게이션 쿼리 (Navigation Query): 경로 탐색 외에, 특정 위치가 이동 가능한지, 가장 가까운 이동 가능한 지점은 어디인지 등을 쿼리할 수 있습니다.
- AI Move To 노드 (블루프린트): 비헤이비어 트리가 아닌 일반 블루프린트에서 AI를 이동시킬 때
AI Move To노드를 사용할 수 있습니다.
내비게이션 테스트 및 디버깅
Move To가 실패하거나 AI가 멈춰 보이면 내비메시, 블랙보드 값, 도착 반경을 순서대로 분리해서 확인해야 원인을 빠르게 좁힐 수 있습니다.
- 내비메시 확인:
P키를 눌러 내비메시가 올바르게 생성되었는지 확인합니다. AI가 이동해야 할 모든 영역이 녹색으로 표시되어야 합니다. - AI 디버깅: PIE에서 Gameplay Debugger(기본 apostrophe 키)의 AI/NavMesh 정보를 사용합니다.
show navigation도 사용할 수 있으며 키 매핑·빌드 설정에 따라 디버거 사용 가능 여부가 달라집니다. - 블랙보드 디버깅: 비헤이비어 트리 에디터에서
디버그(Debug)드롭다운 메뉴를 통해 현재 실행 중인 AI를 선택하면, 블랙보드의 값 변화와 비헤이비어 트리의 실행 흐름을 실시간으로 확인할 수 있습니다.
내비게이션 시스템은 AI 이동 판단을 실제 경로로 연결하는 기반입니다.
비헤이비어 트리, EQS, 내비 메시 갱신 상태를 함께 확인하세요.