내비게이션 시스템을 통한 기본 AI 이동
지난 절에서 우리는 비헤이비어 트리와 EQS를 통해 AI가 "무엇을 할 것인가?"와 "어디서 할 것인가?"를 결정하는 방법을 배웠습니다. 이제 AI가 결정한 목표 위치로 "어떻게 이동할 것인가?" 에 대한 문제를 해결해야 합니다. 언리얼 엔진은 AI가 복잡한 3D 환경에서 효율적으로 길을 찾아 이동할 수 있도록 강력한 내비게이션 시스템(Navigation System) 을 제공합니다.
이번 절에서는 언리얼 엔진의 내비게이션 시스템, 특히 내비메시(NavMesh) 의 기본 개념과 AI 이동에 이를 활용하는 방법에 대해 자세히 알아보겠습니다.
내비게이션 시스템과 내비메시란 무엇인가?
내비게이션 시스템(Navigation System) 은 AI가 게임 세계에서 장애물을 피하고 목표 지점까지 최적의 경로를 찾아 이동할 수 있도록 지원하는 기능들의 집합입니다. 이 시스템의 핵심은 바로 내비메시(NavMesh) 입니다.
내비메시(Navigation Mesh) 내비메시는 AI가 이동할 수 있는 공간을 나타내는 2D 또는 3D 폴리곤 메시입니다. 언리얼 엔진은 레벨에 배치된 지오메트리(바닥, 벽, 오브젝트 등)를 분석하여 AI가 걸어 다닐 수 있는 영역을 자동으로 계산하고, 이 영역을 녹색으로 표시되는 메시 형태로 생성합니다. AI는 이 내비메시 위에서만 이동 경로를 탐색하고 움직일 수 있습니다.
내비메시가 필요한 이유
- 경로 탐색 (Pathfinding): AI가 복잡한 환경에서 장애물을 피하고 목표까지 가장 효율적인 경로를 계산할 수 있게 합니다.
- 성능 최적화: AI가 이동 가능한 영역만 미리 계산해두므로, 런타임에 매번 복잡한 지오메트리 계산을 할 필요 없이 빠르게 경로를 찾을 수 있습니다.
- 현실적인 이동: AI가 벽을 뚫거나 공중에 뜨는 등 비정상적인 움직임을 하지 않도록 제어합니다.
- 유연성: 점프, 낙하, 특정 높이까지의 이동 등 다양한 이동 방식을 내비메시 설정으로 제어할 수 있습니다.
내비메시 생성 및 설정
내비메시는 기본적으로 프로젝트에 내비게이션 시스템이 활성화되어 있다면 자동으로 생성됩니다.
내비게이션 시스템 활성화 확인
편집(Edit)
>프로젝트 세팅(Project Settings)
>엔진(Engine)
>내비게이션 시스템(Navigation System)
으로 이동합니다.Generate Navigation Data
가 체크되어 있는지 확인합니다. (기본적으로 체크되어 있습니다.)
내비메시 볼륨 배치
플레이스 액터(Place Actors)
패널에서볼륨(Volumes)
섹션으로 이동합니다.Nav Mesh Bounds Volume
을 레벨에 드래그 앤 드롭하여 배치합니다.- 이 볼륨의 크기를 조절하여 AI가 이동할 수 있는 모든 영역을 포함하도록 합니다.
- 볼륨을 배치하면 자동으로 내비메시가 계산되어 녹색으로 표시됩니다.
- Tip:
P
키를 누르면 내비메시를 토글하여 켜고 끌 수 있습니다.
내비메시 설정 조정 (선택 사항)
Nav Mesh Bounds Volume
을 선택한 상태에서디테일(Details)
패널을 확인합니다.내비게이션 메시(Navigation Mesh)
섹션에서 다양한 설정을 조정할 수 있습니다.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
태스크는 성공으로 간주됩니다.Stop On Overlap
: 목표 지점에 도착했을 때 AI가 완전히 멈출지 여부를 설정합니다.Allow Partial Path
: 목표 지점까지 완전한 경로를 찾지 못하더라도 부분적인 경로라도 따라 이동할지 여부를 설정합니다.Observe BlackBoard Value
:Blackboard Key
의 값이 변경될 때Move To
태스크를 다시 시작할지 여부를 설정합니다. (예: 플레이어의 위치가 계속 변할 때 추적)
컴파일 및 저장합니다.
예시: 플레이어 추적 AI (비헤이비어 트리 구조)
Root
|
Selector (플레이어가 보이는가? -> 공격 / 아니면 순찰)
|
+--- Sequence (플레이어 추적 및 공격)
| |
| +--- Decorator: Blackboard Based Condition (플레이어가 보이는가?)
| | (블랙보드 키: TargetActor, 조건: Not Set == false)
| +--- Service: Update Player Location (주기적으로 플레이어 위치를 TargetActor에 저장)
| |
| +--- Task: Move To (Blackboard Key: TargetActor, Acceptable Radius: 150)
| | (플레이어에게 150 유닛까지 접근)
| +--- Task: Attack Player (커스텀 태스크)
|
+--- Sequence (순찰)
|
+--- Task: Find Random Location (블랙보드에 RandomLocation 저장)
+--- Task: Move To (Blackboard Key: RandomLocation)
+--- Task: Wait (5초 대기)
이 예시에서 Move To
노드는 TargetActor
(플레이어) 또는 RandomLocation
(순찰 지점)으로 AI를 이동시킵니다. 내비메시가 없으면 Move To
노드는 경로를 찾지 못하고 실패하게 됩니다.
내비게이션 시스템의 고급 활용 (선택 사항)
- 내비게이션 링크 (Navigation Links): AI가 점프, 클라이밍, 특정 오브젝트와의 상호작용을 통해 이동할 수 있는 경로를 수동으로 지정할 때 사용합니다. (예: 절벽 사이를 점프하거나 사다리를 오르는 경로)
- 내비게이션 리캐스트 (Navigation Recast): 동적으로 변하는 환경(예: 문이 열리거나 닫히는 경우, 파괴 가능한 오브젝트)에 맞춰 내비메시를 실시간으로 업데이트합니다.
- 내비게이션 쿼리 (Navigation Query): 경로 탐색 외에, 특정 위치가 이동 가능한지, 가장 가까운 이동 가능한 지점은 어디인지 등을 쿼리할 수 있습니다.
- AI Move To 노드 (블루프린트): 비헤이비어 트리가 아닌 일반 블루프린트에서 AI를 이동시킬 때
AI Move To
노드를 사용할 수 있습니다.
테스트 및 디버깅
- 내비메시 확인:
P
키를 눌러 내비메시가 올바르게 생성되었는지 확인합니다. AI가 이동해야 할 모든 영역이 녹색으로 표시되어야 합니다. - AI 디버깅: 게임 플레이 중
~
키를 눌러 콘솔을 열고ai.debugdrawpath 1
명령어를 입력하면 AI의 이동 경로를 시각적으로 확인할 수 있습니다.show navigation
명령어도 유용합니다. - 블랙보드 디버깅: 비헤이비어 트리 에디터에서
디버그(Debug)
드롭다운 메뉴를 통해 현재 실행 중인 AI를 선택하면, 블랙보드의 값 변화와 비헤이비어 트리의 실행 흐름을 실시간으로 확인할 수 있습니다.
내비게이션 시스템은 AI가 게임 세계에서 '살아있는' 것처럼 움직이게 만드는 기반입니다. 비헤이비어 트리와 EQS를 통해 AI의 의사결정을 내리고, 내비게이션 시스템을 통해 그 의사결정을 실제 이동으로 구현함으로써, 더욱 몰입감 있고 반응적인 게임 경험을 제공할 수 있습니다.
이번 절에서는 언리얼 엔진의 내비게이션 시스템, 특히 내비메시의 개념과 설정, 그리고 비헤이비어 트리의 Move To
노드를 활용한 AI 이동 구현 방법에 대해 알아보았습니다. AI가 게임 세계를 지능적으로 탐색하고 이동하는 데 내비게이션 시스템은 필수적인 요소입니다.