개요
이 문서에서는 내비게이션 메시(Navigation Mesh)를 수정하는 다양한 방법을 알아보기 위해 레벨과 AI 에이전트를 만드는 준비 단계를 안내합니다.
그 대신 이 가이드에서 다루는 머티리얼이 모두 포함된 전체 샘플 프로젝트를 다운로드할 수도 있습니다.
목적
-
간단한 레벨을 제작하고 레벨에 내비메시 바운드 볼륨 액터를 배치하여 내비게이션을 추가합니다.
-
ThirdPersonCharacter 블루프린트를 수정하여 내비게이션 시스템으로 레벨에서 돌아다니게 합니다.
1 - 필수 설정
-
메뉴의 새 프로젝트 카테고리(New Project Categories) 섹션에서 게임(Games) > 삼인칭(Third Person) 템플릿을 선택합니다.
-
블루프린트(Blueprint) 와 시작용 콘텐츠 없음(No Starter Content) 옵션을 선택한 뒤 생성(Create) 을 클릭합니다.
섹션 결과
새 삼인칭 프로젝트를 생성했으니 이제 내비게이션 메시가 있는 기본 레벨을 제작할 준비가 되었습니다.
2 - 테스트 레벨 만들기
-
메뉴 바에서 파일(File) > 새 레벨(New Level) 을 클릭합니다.
-
기본(Basic) 레벨을 선택하고 생성(Create) 을 클릭합니다.
-
아웃라이너(Outliner) 에서 Floor 스태틱 메시 액터(Static Mesh Actor)를 선택하고 디테일(Details) 패널에서 스케일(Scale) 을 X = 10, Y = 10, Z = 1로 설정합니다.
-
콘텐츠 드로어(Content Drawer) 에서 LevelPrototyping > Meshes 로 이동한 다음 TemplateFloor 스태틱 메시를 레벨로 드래그합니다.
-
액터 배치(Place Actors) 패널에서 내비메시 바운드 볼륨(Nav Mesh Bounds Volume) 을 검색합니다. 볼륨을 레벨로 드래그하여 바닥 메시 위에 배치합니다.
-
NavMeshBoundsVolume 을 선택한 뒤 디테일(Details) 패널에서 스케일(Scale) 을 X = 20, Y = 20, Z = 5로 설정하여 바닥 영역 전체를 덮습니다. 언리얼 엔진은 기본적으로 내비게이션 바운드 안에 자동으로 내비게이션을 생성합니다. 내비메시 액터 RecastNavMesh-Default 도 레벨에 추가되었을 것입니다. P 를 누르면 레벨에서 내비게이션 메시를 시각화할 수 있습니다.
내비게이션이 생성되지 않으면 프로젝트 세팅(Project Settings) > 내비게이션 시스템(Navigation System)으로 이동하여 내비게이션 데이터 자동 생성(Auto Create Navigation Data) 체크박스를 활성화합니다.
-
액터 배치(Place Actors) 패널의 셰이프(Shapes) 카테고리에서 큐브(Cube) 스태틱 메시 액터를 레벨로 드래그합니다.
-
큐브 를 선택한 뒤 디테일(Details) 패널에서 스케일(Scale) 을 X = 1, Y = 1, Z = 5로 설정합니다.
-
큐브 를 3개 더 레벨로 드래그하여 위와 같이 스케일을 조절합니다. 바닥에 배치하여 아래와 같이 4개의 기둥을 만듭니다.
-
다음으로 중앙에 계단과 플랫폼을 추가하겠습니다. 콘텐츠 드로어(Content Drawer) 에서 ThirdPerson > Meshes 로 이동한 다음 Linear_Stair_StaticMesh 를 레벨로 드래그합니다.
-
계단을 선택한 뒤 디테일(Details) 패널에서 스케일(Scale) 을 X = 1.5, Y = 1, Z = 1.3으로 설정합니다.
-
계단을 선택한 뒤 Alt 를 누른 채로 메시를 드래그하여 복제합니다.
-
액터 배치(Place Actors) 패널의 셰이프(Shapes) 카테고리에서 큐브(Cube) 스태틱 메시 액터를 레벨로 드래그합니다. 디테일(Details) 패널에서 스케일(Scale) 을 X = 14, Y = 4, Z = 0.1로 설정합니다. 액터를 계단 모서리에 배치하여 아래와 같은 플랫폼을 만듭니다.
-
액터 배치(Place Actors) 패널의 기본(Basic) 카테고리에서 스피어(Sphere) 스태틱 메시 액터를 레벨로 드래그합니다.
-
스피어(Sphere) 를 선택한 뒤 디테일(Details) 패널의 콜리전(Collision) 섹션에서 콜리전 프리셋(Collision Presets) 을 NoCollision 으로 설정합니다.
-
마지막으로, 스피어를 복제하여 아래와 같이 레벨 곳곳에 배치합니다.
섹션 결과
이 섹션에서는 간단한 레벨을 제작하고 내비메시 바운드 볼륨(Nav Mesh Bounds Volume)을 추가했습니다. 또한 에이전트의 타깃 액터 역할을 할 스피어 다섯 개를 추가했습니다.
3 - 에이전트 만들기
이 섹션에서는 타깃 액터들 사이를 이동할 AI 에이전트를 만듭니다.
-
콘텐츠 드로어(Content Drawer) 에서 우클릭하고 새 폴더(New Folder) 를 선택하여 새 폴더를 생성합니다. 폴더를 NavigationSystem 으로 명명합니다.
-
콘텐츠 드로어(Content Drawer) 에서 ThirdPersonBP > Blueprints 폴더로 이동하여 BP_ThirdPersonCharacter 블루프린트를 선택합니다. NavigationSystem 폴더로 드래그하고 여기에 복사(Copy Here) 옵션을 선택합니다.
-
NavigationSystem 폴더로 이동하여 블루프린트 이름을 BP_NPC_ModNavMesh 로 변경합니다. 블루프린트를 더블클릭하여 블루프린트 에디터를 열고 이벤트 그래프(Event Graph) 로 이동합니다. 모든 입력 노드를 선택해서 지웁니다.
-
이벤트 그래프 를 우클릭한 뒤 커스텀 이벤트 추가(Add Custom Event) 를 검색하고 선택합니다. 이벤트를 MoveNPC 로 명명합니다.
-
내 블루프린트(My Blueprint) 패널에서 변수(Variables) 옆의 추가(+) 버튼을 클릭하여 새 변수를 생성합니다. 변수를 TargetList 로 명명합니다.
-
디테일(Details) 패널에서 변수 유형(Variable Type) 옆의 드롭다운을 클릭합니다. Actor > 오브젝트 레퍼런스(Object Reference) 를 검색하고 선택합니다.
-
선택된 액터 옵션 옆의 파란색 구체 아이콘을 클릭하고 아래와 같이 배열(Array) 옵션을 클릭합니다. 인스턴스 편집가능(Instance Editable) 체크박스를 클릭하여 활성화합니다.
-
TargetList 변수를 이벤트 그래프(Event Graph) 로 드래그하고 Get TargetList 옵션을 선택합니다.
-
TargetList 노드에서 드래그하여 Last Index 를 검색하고 선택합니다.
-
TargetList 노드에서 드래그하여 Get (사본) 노드를 선택합니다.
-
Get 노드의 녹색 핀에서 드래그하여 Random Integer in Range 를 검색하고 선택합니다. 아래와 같이 Last Index 노드의 녹색 핀을 Random Integer in Range 노드의 Max 핀에 연결합니다.
-
Get 노드에서 드래그하여 변수로 승격(Promote to variable) 을 검색하고 선택합니다. 변수를 CurrentTarget 으로 명명하고 MoveNPC 노드와 연결합니다.
-
CurrentTarget 노드에서 드래그하여 Is Valid 를 검색하고 선택합니다. Is Valid 매크로 노드를 Set CurrentTarget 노드에 연결합니다.
-
CurrentTarget 변수를 이벤트 그래프(Event Graph) 로 드래그하고 Get CurrentTarget 을 선택합니다. CurrentTarget 노드에서 드래그하여 GetActorLocation 을 검색하고 선택합니다.
-
GetActorLocation 노드의 Return Value 에서 드래그하여 GetRandomReachablePointInRadius 를 검색하고 선택합니다. Radius 값을 100 으로 설정합니다.
-
GetRandomReachablePointInRadius 노드의 Random Location 핀을 드래그하여 변수로 승격(Promote to variable) 을 선택합니다. 변수를 RandomLocation 으로 명명합니다. 아래와 같이 RandomLocation 노드를 Is Valid 노드와 연결합니다.
-
RandomLocation 노드에서 드래그하여 AI MoveTo 를 검색하고 선택합니다.
-
AI MoveTo 노드의 Pawn 핀에서 드래그하여 셀프 레퍼런스 가져오기(Get a reference to self) 를 선택합니다. RandomLocation 노드의 노란색 핀을 AI MoveTo 노드의 Destination 핀에 연결합니다. 마지막으로 아래와 같이 AI MoveTo 노드의 Acceptance Radius 를 50으로 설정합니다.
-
AI MoveTo 노드의 On Success 핀에서 드래그하여 Delay 를 검색하고 선택합니다. Delay 노드의 Duration 을 4 로 설정합니다. 아래와 같이 Delay 노드의 Completed 핀에서 드래그하여 Move NPC 를 검색하고 선택합니다.
-
위 단계를 반복하여 AI MoveTo 노드의 On Fail 핀에도 노드를 추가합니다. Delay 노드의 Duration 을 0.1로 설정합니다.
-
이벤트 그래프 를 우클릭한 뒤 이벤트 BeginPlay 를 검색하고 선택합니다. BeginPlay 이벤트 노드에서 드래그하여 MoveNPC 를 검색하고 선택합니다.
-
블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다.
-
BP_NPC_ModNavMesh 블루프린트를 레벨로 드래그한 뒤 디테일(Details) 패널에서 타깃 리스트(Target List) 를 찾고 추가(+) 버튼을 클릭하여 새 타깃 액터를 추가합니다.
-
드롭다운을 클릭한 뒤 앞서 생성한 스피어(Sphere) 액터를 검색하고 선택합니다.
-
위 단계를 반복하여 남은 4개의 스피어(Sphere) 액터를 추가합니다.
-
시뮬레이트(Simulate) 를 클릭하여 에이전트가 레벨 내에서 목표 사이를 이동하는 것을 확인합니다.
섹션 결과
이 섹션에서는 타깃 액터들 사이를 이동하는 에이전트를 만들었습니다. 이제 내비게이션 시스템 수정하기에 대해 학습할 수 있습니다.