icon

안동민 개발노트

8장 : AI 시스템 구축

내비게이션 시스템을 통한 기본 AI 이동


지난 절에서는 비헤이비어 트리와 EQS로 AI가 무엇을 할지어디서 할지를 결정하는 방법을 배웠습니다. 이제는 결정한 목표 위치로 어떻게 이동할지를 해결해야 합니다. 언리얼 엔진은 이를 위해 AI 경로 탐색용 내비게이션 시스템(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가 게임 세계를 지능적으로 탐색하고 이동하는 데 내비게이션 시스템은 필수적인 요소입니다.

목차