내비게이션 메시 수정 준비 가이드

이 가이드에서는 내비게이션 메시 수정을 학습하기 위한 준비 단계를 다룹니다.

Choose your operating system:

Windows

macOS

Linux

개요

이 문서에서는 내비게이션 메시(Navigation Mesh)를 수정하는 다양한 방법을 알아보기 위해 레벨과 AI 에이전트를 만드는 준비 단계를 안내합니다.

그 대신 이 가이드에서 다루는 머티리얼이 모두 포함된 전체 샘플 프로젝트를 다운로드할 수도 있습니다.

세부 목표

  • 간단한 레벨을 제작하고 레벨에 내비메시 바운드 볼륨 액터를 배치하여 내비게이션을 추가합니다.

  • ThirdPersonCharacter 블루프린트를 수정하여 내비게이션 시스템으로 레벨에서 돌아다니게 합니다.

1 - 필수 구성

  1. 메뉴의 새 프로젝트 카테고리(New Project Categories) 섹션에서 게임(Games) > 삼인칭(Third Person) 템플릿을 선택합니다.

    게임 카테고리를 선택하고 게임 및 삼인칭 템플릿을 선택합니다

  2. 블루프린트(Blueprint)시작용 콘텐츠 없음(No Starter Content) 옵션을 선택한 뒤 생성(Create) 을 클릭합니다.

    블루프린트와 시작용 콘텐츠 없음 옵션을 선택한 뒤 생성을 클릭합니다

섹션 결과

새 삼인칭 프로젝트를 생성했으니 이제 내비게이션 메시가 있는 기본 레벨을 제작할 준비가 되었습니다.

2 - 테스트 레벨 만들기

  1. 메뉴 바에서 파일(File) > 새 레벨(New Level) 을 클릭합니다.

    새 레벨을 생성합니다

  2. 기본(Basic) 레벨을 선택하고 생성(Create) 을 클릭합니다.

    기본 레벨을 선택하고 생성을 클릭합니다

  3. 아웃라이너(Outliner) 에서 Floor 스태틱 메시 액터(Static Mesh Actor)를 선택하고 디테일(Details) 패널에서 스케일(Scale) 을 X = 10, Y = 10, Z = 1로 설정합니다.

    월드 아웃라이너에서 Floor 스태틱 메시 액터를 선택합니다

    스케일을 X = 10, Y = 10, Z = 1로 설정합니다

  4. 콘텐츠 드로어(Content Drawer) 에서 LevelPrototyping > Meshes 로 이동한 다음 TemplateFloor 스태틱 메시를 레벨로 드래그합니다.

    TemplateFloor 스태틱 메시를 레벨로 드래그합니다

  5. 액터 배치(Place Actors) 패널에서 내비메시 바운드 볼륨(Nav Mesh Bounds Volume) 을 검색합니다. 볼륨을 레벨로 드래그하여 바닥 메시 위에 배치합니다.

    내비메시 바운드 볼륨을 레벨로 드래그합니다

  6. NavMeshBoundsVolume 을 선택한 뒤 디테일(Details) 패널에서 스케일(Scale) 을 X = 20, Y = 20, Z = 5로 설정하여 바닥 영역 전체를 덮습니다. 언리얼 엔진은 기본적으로 내비게이션 바운드 안에 자동으로 내비게이션을 생성합니다. 내비메시 액터 RecastNavMesh-Default 도 레벨에 추가되었을 것입니다. P 를 누르면 레벨에서 내비게이션 메시를 시각화할 수 있습니다.

    내비게이션이 생성되지 않으면 프로젝트 세팅(Project Settings) > 내비게이션 시스템(Navigation System)으로 이동하여 내비게이션 데이터 자동 생성(Auto Create Navigation Data) 체크박스를 활성화합니다.

    스케일을 X = 20, Y = 20, Z = 5로 설정합니다

    이제 내비게이션 메시가 바닥 전체를 덮습니다

  7. 액터 배치(Place Actors) 패널의 셰이프(Shapes) 카테고리에서 큐브(Cube) 스태틱 메시 액터를 레벨로 드래그합니다.

    큐브 스태틱 메시 액터를 레벨로 드래그합니다

  8. 큐브 를 선택한 뒤 디테일(Details) 패널에서 스케일(Scale) 을 X = 1, Y = 1, Z = 5로 설정합니다.

    스케일을 X = 1, Y = 1, Z = 5으로 설정합니다

    큐브의 스케일이 조절되었습니다

  9. 큐브 를 3개 더 레벨로 드래그하여 위와 같이 스케일을 조절합니다. 바닥에 배치하여 아래와 같이 4개의 기둥을 만듭니다.

    큐브를 3개 더 레벨로 드래그하여 위와 같이 스케일을 조절합니다

  10. 다음으로 중앙에 계단과 플랫폼을 추가하겠습니다. 콘텐츠 드로어(Content Drawer) 에서 ThirdPerson > Meshes 로 이동한 다음 Linear_Stair_StaticMesh 를 레벨로 드래그합니다.

    중앙에 계단과 플랫폼을 추가합니다

  11. 계단을 선택한 뒤 디테일(Details) 패널에서 스케일(Scale) 을 X = 1.5, Y = 1, Z = 1.3으로 설정합니다.

    스케일을 X = 1.5, Y = 1, Z = 1.3으로 설정합니다

  12. 계단을 선택한 뒤 Alt 를 누른 채로 메시를 드래그하여 복제합니다.

    계단 메시를 복제합니다

  13. 액터 배치(Place Actors) 패널의 셰이프(Shapes) 카테고리에서 큐브(Cube) 스태틱 메시 액터를 레벨로 드래그합니다. 디테일(Details) 패널에서 스케일(Scale) 을 X = 14, Y = 4, Z = 0.1로 설정합니다. 액터를 계단 모서리에 배치하여 아래와 같은 플랫폼을 만듭니다.

    큐브 스태틱 메시 액터를 레벨로 드래그하고 스케일을 X = 14, Y = 4, Z = 0.1로 설정합니다

  14. 액터 배치(Place Actors) 패널의 기본(Basic) 카테고리에서 스피어(Sphere) 스태틱 메시 액터를 레벨로 드래그합니다.

    스피어 스태틱 메시 액터를 레벨로 드래그합니다

  15. 스피어(Sphere) 를 선택한 뒤 디테일(Details) 패널의 콜리전(Collision) 섹션에서 콜리전 프리셋(Collision Presets)NoCollision 으로 설정합니다.

    콜리전 프리셋을 NoCollision으로 설정합니다

  16. 마지막으로, 스피어를 복제하여 아래와 같이 레벨 곳곳에 배치합니다.

    스피어를 복제하여 레벨 곳곳에 배치합니다

섹션 결과

이 섹션에서는 간단한 레벨을 제작하고 내비메시 바운드 볼륨(Nav Mesh Bounds Volume)을 추가했습니다. 또한 에이전트의 타깃 액터 역할을 할 스피어 다섯 개를 추가했습니다.

3 - 에이전트 만들기

이 섹션에서는 타깃 액터들 사이를 이동할 AI 에이전트를 만듭니다.

  1. 콘텐츠 드로어(Content Drawer) 에서 우클릭하고 새 폴더(New Folder) 를 선택하여 새 폴더를 생성합니다. 폴더를 NavigationSystem 으로 명명합니다.

  2. 콘텐츠 드로어(Content Drawer) 에서 ThirdPersonBP > Blueprints 폴더로 이동하여 BP_ThirdPersonCharacter 블루프린트를 선택합니다. NavigationSystem 폴더로 드래그하고 여기에 복사(Copy Here) 옵션을 선택합니다.

    ThirdPersonCharacter 블루프린트를 NavigationSystem 폴더에 복사합니다

  3. NavigationSystem 폴더로 이동하여 블루프린트 이름을 BP_NPC_ModNavMesh 로 변경합니다. 블루프린트를 더블클릭하여 블루프린트 에디터를 열고 이벤트 그래프(Event Graph) 로 이동합니다. 모든 입력 노드를 선택해서 지웁니다.

  4. 이벤트 그래프 를 우클릭한 뒤 커스텀 이벤트 추가(Add Custom Event) 를 검색하고 선택합니다. 이벤트를 MoveNPC 로 명명합니다.

    이벤트 그래프를 우클릭한 뒤 커스텀 이벤트 추가를 검색하고 선택합니다. 이벤트를 MoveNPC로 명명합니다

  5. 내 블루프린트(My Blueprint) 패널에서 변수(Variables) 옆의 추가(+) 버튼을 클릭하여 새 변수를 생성합니다. 변수를 TargetList 로 명명합니다.

    새 변수를 생성하고 TargetList로 명명합니다

  6. 디테일(Details) 패널에서 변수 유형(Variable Type) 옆의 드롭다운을 클릭합니다. Actor > 오브젝트 레퍼런스(Object Reference) 를 검색하고 선택합니다.

    변수 타입을 액터, 오브젝트 레퍼런스로 설정합니다

  7. 선택된 액터 옵션 옆의 파란색 구체 아이콘을 클릭하고 아래와 같이 배열(Array) 옵션을 클릭합니다. 인스턴스 편집가능(Instance Editable) 체크박스를 클릭하여 활성화합니다.

    선택된 액터 옵션 옆의 파란색 구체 아이콘을 클릭하고 배열 옵션을 클릭합니다

    인스턴스 편집가능 체크박스를 클릭하여 활성화합니다

  8. TargetList 변수를 이벤트 그래프(Event Graph) 로 드래그하고 Get TargetList 옵션을 선택합니다.

  9. TargetList 노드에서 드래그하여 Last Index 를 검색하고 선택합니다.

    TargetList 노드에서 드래그하여 Last Index를 검색하고 선택합니다

  10. TargetList 노드에서 드래그하여 Get (사본) 노드를 선택합니다.

    TargetList 노드에서 드래그하여 Get 사본 노드를 검색하고 선택합니다

  11. Get 노드의 녹색 핀에서 드래그하여 Random Integer in Range 를 검색하고 선택합니다. 아래와 같이 Last Index 노드의 녹색 핀을 Random Integer in Range 노드의 Max 핀에 연결합니다.

    Get 노드의 녹색 핀에서 드래그하여 Random Integer in Range를 검색하고 선택합니다

    Last Index 노드의 녹색 핀을 Random Integer in Range 노드의 Max 핀에 연결합니다

  12. Get 노드에서 드래그하여 변수로 승격(Promote to variable) 을 검색하고 선택합니다. 변수를 CurrentTarget 으로 명명하고 MoveNPC 노드와 연결합니다.

    Get 노드에서 드래그하여 변수로 승격을 검색하고 선택합니다

    변수를 CurrentTarget으로 명명하고 MoveNPC 노드와 연결합니다

  13. CurrentTarget 노드에서 드래그하여 Is Valid 를 검색하고 선택합니다. Is Valid 매크로 노드를 Set CurrentTarget 노드에 연결합니다.

    CurrentTarget 노드에서 드래그하여 Is Valid를 검색하고 선택합니다

    Is Valid 매크로 노드를 Set CurrentTarget 노드에 연결합니다

  14. CurrentTarget 변수를 이벤트 그래프(Event Graph) 로 드래그하고 Get CurrentTarget 을 선택합니다. CurrentTarget 노드에서 드래그하여 GetActorLocation 을 검색하고 선택합니다.

    CurrentTarget 노드에서 드래그하여 GetActorLocation을 검색하고 선택합니다

  15. GetActorLocation 노드의 Return Value 에서 드래그하여 GetRandomReachablePointInRadius 를 검색하고 선택합니다. Radius 값을 100 으로 설정합니다.

    GetActorLocation 노드의 Return Value에서 드래그하여 GetRandomReachablePointInRadius를 검색하고 선택합니다

    Radius 값을 100으로 설정합니다

  16. GetRandomReachablePointInRadius 노드의 Random Location 핀을 드래그하여 변수로 승격(Promote to variable) 을 선택합니다. 변수를 RandomLocation 으로 명명합니다. 아래와 같이 RandomLocation 노드를 Is Valid 노드와 연결합니다.

    GetRandomReachablePointInRadius 노드의 Random Location 핀에서 드래그하여 변수로 승격을 선택합니다. 변수를 RandomLocation으로 명명합니다

    RandomLocation 노드를 Is Valid 노드와 연결합니다

  17. RandomLocation 노드에서 드래그하여 AI MoveTo 를 검색하고 선택합니다.

    RandomLocation 노드에서 드래그하여 AI MoveTo를 검색하고 선택합니다

  18. AI MoveTo 노드의 Pawn 핀에서 드래그하여 셀프 레퍼런스 가져오기(Get a reference to self) 를 선택합니다. RandomLocation 노드의 노란색 핀을 AI MoveTo 노드의 Destination 핀에 연결합니다. 마지막으로 아래와 같이 AI MoveTo 노드의 Acceptance Radius 를 50으로 설정합니다.

    AI MoveTo 노드의 Pawn 핀에서 드래그하여 셀프 레퍼런스 가져오기를 검색하고 선택합니다

    RandomLocation 노드의 노란색 핀을 AI MoveTo 노드의 Destination 핀에 연결합니다

  19. AI MoveTo 노드의 On Success 핀에서 드래그하여 Delay 를 검색하고 선택합니다. Delay 노드의 Duration4 로 설정합니다. 아래와 같이 Delay 노드의 Completed 핀에서 드래그하여 Move NPC 를 검색하고 선택합니다.

    AI MoveTo 노드의 On Success 핀에서 드래그하여 Delay를 검색하고 선택합니다. Duration을 4로 설정합니다. Delay 노드에서 드래그하여 MoveNPC 노드를 추가합니다

  20. 위 단계를 반복하여 AI MoveTo 노드의 On Fail 핀에도 노드를 추가합니다. Delay 노드의 Duration 을 0.1로 설정합니다.

    위 단계를 반복하여 AI MoveTo 노드의 On Fail 핀에도 노드를 추가합니다. Delay 노드의 Duration을 0.1로 설정합니다

  21. 이벤트 그래프 를 우클릭한 뒤 이벤트 BeginPlay 를 검색하고 선택합니다. BeginPlay 이벤트 노드에서 드래그하여 MoveNPC 를 검색하고 선택합니다.

    이벤트 그래프를 우클릭한 뒤 이벤트 BeginPlay를 검색하고 선택합니다

    BeginPlay 이벤트 노드에서 드래그하여 MoveNPC를 검색하고 선택합니다

  22. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다.

  23. BP_NPC_ModNavMesh 블루프린트를 레벨로 드래그한 뒤 디테일(Details) 패널에서 타깃 리스트(Target List) 를 찾고 추가(+) 버튼을 클릭하여 새 타깃 액터를 추가합니다.

    BP_NPC_ModNavMesh 블루프린트를 레벨로 드래그합니다

    디테일 패널에서 타깃 리스트를 찾고 추가 버튼을 클릭하여 새 타깃 액터를 추가합니다

  24. 드롭다운을 클릭한 뒤 앞서 생성한 스피어(Sphere) 액터를 검색하고 선택합니다.

    드롭다운을 클릭한 뒤 스피어 액터를 검색하고 선택합니다

  25. 위 단계를 반복하여 남은 4개의 스피어(Sphere) 액터를 추가합니다.

    위 단계를 반복하여 남은 4개의 스피어 액터를 추가합니다

  26. 시뮬레이트(Simulate) 를 클릭하여 에이전트가 레벨 내에서 목표 사이를 이동하는 것을 확인합니다.

    시뮬레이트를 클릭하여 에이전트가 레벨 내에서 목표 사이를 이동하는 것을 확인합니다

섹션 결과

이 섹션에서는 타깃 액터들 사이를 이동하는 에이전트를 만들었습니다. 이제 내비게이션 시스템 수정하기에 대해 학습할 수 있습니다.

태그