내비게이션 인보커 사용하기

이 가이드에서는 내비게이션 인보커를 사용하는 방법을 설명합니다.

Choose your operating system:

Windows

macOS

Linux

개요

언리얼 엔진의 내비게이션 시스템(Navigation System) 은 에이전트가 내비게이션 메시(Navigation Mesh) 를 사용하여 레벨 내에서 경로를 찾고 이동하게 합니다. 내비게이션 시스템에는 내비게이션 메시의 다양한 런타임 생성(Runtime Generation) 메서드뿐 아니라 특정 타깃을 중심으로 부분적인 내비게이션을 생성하는 방법도 있습니다.

내비게이션 인보커(Navigation Invoker) 는 런타임에서 에이전트 주변에 내비게이션 메시를 생성하는 블루프린트 액터 컴포넌트입니다. 내비게이션 인보커를 사용하면 내비게이션 메시를 에디터에서 빌드할 필요가 없어지며 런타임에서 생성되는 타일 수를 제한할 수 있습니다.

내비게이션 인보커는 에디터에서 내비게이션 메시를 빌드하는 것이 실용적이지 못한 대규모 레벨에 이상적입니다.

목표

이 가이드에서는 에이전트에 내비게이션 인보커를 사용하여 게임플레이 도중에 내비게이션 메시를 생성하는 방법을 알아봅니다.

세부 목표

  • 새 레벨을 생성하고 내비게이션 인보커에 사용할 내비게이션 시스템을 환경설정합니다.

  • 내비게이션 인보커를 사용하여 레벨을 돌아다니도록 ThirdPersonCharacter 블루프린트를 수정합니다.

1 - 필수 구성

  1. 언리얼 프로젝트 브라우저(Unreal Project Browser)의 새 프로젝트 카테고리(New Project Categories) 섹션에서 게임(Games) > 삼인칭(Third Person) 템플릿을 선택합니다.

    게임 및 삼인칭 카테고리를 선택하고 다음을 클릭합니다

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

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

섹션 결과

새 삼인칭 프로젝트를 생성했으니 이제 내비게이션 인보커를 배울 준비가 되었습니다.

2 - 테스트 레벨 만들기

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

    새 레벨을 클릭합니다

  2. 기본(Basic) 레벨을 선택합니다.

    기본 레벨을 선택합니다

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

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

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

  4. 세팅(Settings) > 프로젝트 세팅(Project Settings) 을 클릭하고 내비게이션 시스템(Navigation System) 카테고리로 이동합니다. Navigation Invoker 주변에만 내비게이션 생성(Generate Navigation Only Around Navigation Invokers) 체크박스를 활성화합니다.

    프로젝트 세팅을 클릭합니다

    Navigation Invoker 주변에만 내비게이션 생성 체크박스를 활성화합니다

  5. 내비게이션 메시(Navigation Mesh) 카테고리로 이동하여 런타임(Runtime) 섹션으로 내려갑니다. Runtime Generation 드롭다운을 클릭하고 Dynamic 을 선택합니다.

    Runtime Generation 드롭다운을 클릭하고 Dynamic을 선택합니다

  6. 액터 배치(Place Actors) 패널에서 NavMeshBoundsVolume 을 검색합니다. 볼륨을 레벨로 드래그하여 바닥 메시 위에 배치합니다. NavMeshBoundsVolume 의 스케일을 X = 500, Y = 500, Z = 10로 조절합니다.

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

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

섹션 결과

이 섹션에서는 새 레벨을 생성하고 내비게이션 인보커에 사용할 내비게이션 시스템을 구성했습니다.

3 - 에이전트 만들기

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

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

    ThirdPersonCharacter 블루프린트를 NavigationSystem 폴더로 드래그하고 여기에 복사를 선택합니다

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

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

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

  5. 이벤트 그래프 를 우클릭한 뒤 Get Actor Location 을 검색하고 선택합니다.

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

  6. GetActorLocation 노드에서 드래그하여 GetRandomReachablePointInRadius 를 검색하고 선택합니다. Radius 를 1000으로 설정합니다.

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

  7. GetRandomReachablePointInRadius 노드의 Random Location 핀을 드래그하여 변수로 승격(Promote to variable) 을 선택합니다.

    GetRandomReachablePointInRadius 노드의 Random Location 핀을 드래그하여 변수로 승격을 선택합니다

  8. 방금 만든 RandomLocation 노드에 MoveNPC 노드를 연결합니다.

    RandomLocation 노드에 MoveNPC 노드를 연결합니다

  9. 이벤트 그래프(Event Graph) 를 우클릭한 뒤 AI MoveTo 를 검색하고 선택합니다. RandomLocation 노드를 AI MoveTo 노드에 연결합니다.

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

  10. 이벤트 그래프 를 우클릭한 뒤 셀프 레퍼런스 가져오기(Get reference to self) 를 검색하고 선택합니다.

    이벤트 그래프를 우클릭한 뒤 셀프 레퍼런스 가져오기를 검색하고 선택합니다

  11. Self 노드를 AI MoveTo 노드의 Pawn 핀에 연결합니다. 아래와 같이 Random Location 노드의 노란색 핀을 AI MoveTo 노드의 Destination 핀에 연결합니다.

    Self 노드를 AI MoveTo 노드의 Pawn 핀에 연결합니다. Random Location 노드의 노란색 핀을 AI MoveTo 노드의 Destination 핀에 연결합니다

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

    AI MoveTo 노드의 On Success 핀에서 드래그하여 Delay 노드를 추가합니다. Duration을 4로 설정합니다. Completed 핀에서 드래그하여 Move NPC 노드를 추가합니다

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

    위 단계를 반복하여 On Fail 핀에도 두 노드를 추가합니다

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

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

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

  15. 컴포넌트(Component) 탭에서 +추가(+Add) 드롭다운을 클릭한 뒤 네비게이션 인보커(Navigation Invoker) 를 검색하고 선택합니다.

    컴포넌트 탭에서 컴포넌트 추가 드롭다운을 클릭한 뒤 Navigation Invoker를 검색하고 선택합니다

  16. NavigationInvoker 컴포넌트를 선택한 채 디테일(Details) 패널에서 내비게이션(Navigation) 섹션을 찾습니다. 여기서 내비게이션 메시 타일이 생성되는 액터 주변 반경인 Tile Generation Radius 와 내비게이션 메시 타일이 제거되는 액터 주변 반경인 Tile Removal Radius 를 변경할 수 있습니다. 이 예시에서는 이 값들을 각각 30005000 으로 설정합니다.

    Tile Generation Radius를 3000, Tile Removal Radius를 5000으로 설정합니다

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

  18. BP_NPC_Invoker 블루프린트를 레벨로 여러 개 드래그하고 시뮬레이트(Simulate) 를 클릭하여 각 에이전트 주변에 생성되는 내비게이션을 봅니다.

    BP_NPC_Invoker 블루프린트를 레벨로 여러 개 드래그합니다

    내비게이션이 보이지 않으면 키보드에서 P를 눌러 내비게이션 메시를 시각화합니다.

    이제 에이전트들이 레벨에서 움직입니다

섹션 결과

이 섹션에서는 레벨에서 돌아다니는 에이전트를 만들고 내비게이션 인보커 컴포넌트를 사용하여 에이전트 주변에 내비게이션 메시를 생성했습니다.

태그