개요
언리얼 엔진의 내비게이션 시스템(Navigation System) 은 에이전트가 내비게이션 메시(Navigation Mesh) 를 사용하여 레벨 내에서 경로를 찾고 이동하도록 지원합니다.
에이전트는 내비게이션 메시 내에서 각 내비게이션 폴리곤의 비용을 비교하여 목적지에 도달하는 최적의 경로를 결정합니다. 경로상의 모든 폴리곤이 같은 비용이면 에이전트는 타깃까지의 최단 경로를 선택합니다(보통 직선입니다).
내비게이션 모디파이어 볼륨(Navigation Modifier Volume) 및 내비게이션 쿼리 필터(Navigation Query Filter) 를 사용하여 내비게이션 폴리곤 비용에 인플루언스를 줄 수 있습니다.
내비게이션 모디파이어 볼륨(Navigation Modifier Volume)은 영역 클래스(Area Class) 를 사용하여 볼륨 내 내비게이션의 디폴트 비용(Default Cost) 배수를 결정합니다. 영역 클래스로 에이전트가 영역에 들어갈 때 적용되는 초기 비용인 고정된 영역 진입 비용(Fixed Area Entering Cost) 을 정의할 수도 있습니다. 영역 클래스는 에이전트가 레벨에서 이동하는 방식에 영향을 주기 위해 필요한 만큼 얼마든지 생성할 수 있습니다.
내비게이션 쿼리 필터(Navigation Query Filter) 는 하나 이상의 영역 클래스에 대한 정보를 포함하며, 필요에 따라 비용 값을 오버라이드할 수 있습니다. 쿼리 필터는 에이전트가 레벨에서 이동하는 방식을 더 자세히 커스터마이징하기 위해 필요한 만큼 얼마든지 생성할 수 있습니다.
목표
이 퀵스타트 가이드에서는 내비게이션 영역(Navigation Area)과 쿼리 필터(Query Filter)를 직접 생성하고 사용하여 동일한 내비게이션 메시에서 서로 다른 에이전트가 타깃을 향해 이동하는 방식에 영향을 줄 것입니다.
목적
-
내비게이션 모디파이어 볼륨으로 세 개의 커스텀 영역 클래스(Area Classes)를 만듭니다.
-
에이전트가 사용할 두 개의 내비게이션 쿼리 필터(Navigation Query Filter)를 만듭니다.
1 - 커스텀 영역 클래스 만들기
-
액터 배치(Place Actors) 패널에서 내비 모디파이어 볼륨(Nav Modifier Volume) 을 검색합니다. 내비 모디파이어 볼륨 액터를 레벨로 드래그하여 Floor 메시 위에 배치합니다. 디테일(Details) 패널에서 스케일(Scale) 을 X = 2, Y = 6, Z = 1로 설정합니다.
-
콘텐츠 드로어(Content Drawer) 에서 우클릭하고 기본 에셋 생성(Create Basic Asset) 섹션의 블루프린트 클래스(Blueprint Class) 를 선택합니다.
-
부모 클래스 선택(Pick Parent Class) 창에서 모든 클래스(All Classes) 섹션으로 이동하여 화살표를 펼칩니다. NavArea 를 검색하고 선택합니다. 선택(Select) 을 클릭하고 블루프린트를 BP_Area_Neutral 로 명명합니다.
-
앞의 두 단계를 두 번 반복하고 블루프린트를 각각 BP_Area_Lane1 과 BP_Area_Lane2 로 명명합니다.
-
BP_Area_Lane1 블루프린트를 더블클릭하여 엽니다. 볼륨 내에서 이동할 때의 디폴트 비용(Default Cost) 배수와 고정된 영역 진입 비용(Fixed Area Entering Cost) 을 수정할 수 있습니다. 이 예시에서는 두 세팅 모두 디폴트 값으로 둡니다.
-
드로 컬러(Draw Color) 바를 클릭하고 파란색 을 선택합니다. 컴파일(Compile) 하고 저장(Save) 합니다.
-
BP_Area_Lane2 블루프린트에서 위 단계를 반복하여 드로 컬러(Draw Color) 를 빨간색 으로 변경합니다.
-
레벨에서 내비 모디파이어 볼륨(Nav Modifier Volume) 을 선택하고 디테일(Details) 패널에서 Area Class 드롭다운을 클릭한 뒤 BP_Area_Neutral 을 선택합니다.
-
내비 모디파이어 볼륨(Nav Modifier Volume) 을 복제하고 위 단계에 따라 Area Class 를 BP_Area_Lane1 으로 변경합니다. 볼륨을 측면으로 옮겨서 아래와 같은 레인을 만듭니다.
-
이전 단계를 반복하여 내비 모디파이어 볼륨(Nav Modifier Volume) 을 복제하고 Area Class 를 BP_Area_Lane2 로 설정합니다. 볼륨을 측면으로 옮겨서 아래와 같은 레인을 만듭니다.
-
이제 각 영역 클래스(Area Class) 값을 변경하여 실험하면서 타깃을 향한 에이전트의 경로에 영향을 줄 수 있습니다. 아래 예시에서는 BP_Area_Neutral 과 BP_Area_Lane1 의 디폴트 비용(Default Cost) 을 모두 4로 설정했습니다.
-
이 예시에서는 BP_Area_Neutral 과 BP_Area_Lane2 의 디폴트 비용(Default Cost) 을 모두 4로 설정했습니다.
섹션 결과
이 섹션에서는 세 개의 커스텀 영역 클래스(Area Class) 를 생성하고 레벨에 배치했습니다. 또한 영역 클래스 의 디폴트 비용(Default Cost) 값을 변경하여 타깃을 향한 에이전트의 이동에 영향을 주었습니다.
2 - 내비게이션 쿼리 필터 만들기
-
콘텐츠 드로어(Content Drawer) 에서 우클릭하고 기본 에셋 생성(Create Basic Asset) 섹션의 블루프린트 클래스(Blueprint Class) 를 선택합니다.
-
부모 클래스 선택(Pick Parent Class) 창에서 모든 클래스(All Classes) 섹션으로 이동하여 화살표를 펼칩니다. NavigationQueryFilter 를 검색하고 선택합니다. 선택(Select) 을 클릭하고 블루프린트를 BP_QueryFilter1 로 명명합니다.
-
BP_QueryFilter1 블루프린트를 더블클릭하여 엽니다. Areas 섹션 옆의 추가(+) 버튼을 클릭하여 펼칩니다.
-
Area Class 옆 드롭다운을 클릭한 뒤 BP_Area_Neutral 을 검색하고 선택합니다. Travel Cost Override 체크박스를 활성화하고 100 을 입력합니다.
-
이전 단계를 반복하여 BP_Area_Lane1 과 BP_Area_Lane2 를 목록에 추가합니다. BP_Area_Lane2 에서 Travel Cost Override 체크박스를 활성화하고 100을 입력합니다.
-
콘텐츠 드로어(Content Drawer) 에서 BP_QueryFilter1 블루프린트를 우클릭하고 복제(Duplicate) 를 선택합니다.
-
BP_QueryFilter2 블루프린트를 더블클릭하여 엽니다. 영역 클래스 BP_Area_Lane1 에서 Travel Cost Override 체크박스를 활성화하고 값을 100으로 설정합니다. 영역 클래스 BP_Area_Lane2 에서 Travel Cost Override 체크박스를 비활성화합니다.
-
블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다.
-
레벨에서 BP_NPC 블루프린트를 선택하고 디테일(Details) 패널에서 Filter Class 드롭다운을 클릭한 뒤 BP_QueryFilter1 을 검색하고 선택합니다.
-
시뮬레이트(Simulate) 를 클릭하고 에이전트가 내비게이션 쿼리 필터(Navigation Query Filter) 를 사용하여 목적지로 가는 최적의 경로를 결정하는 것을 확인합니다. BP_QueryFilter1 에서는 BP_Area_Lane1 이 가장 저렴한 경로이므로 에이전트는 이 경로를 사용하여 스피어에 도달합니다.
-
BP_NPC 블루프린트를 선택하고 Filter Class 를 BP_QueryFilter2 로 변경합니다. 시뮬레이트(Simulate) 를 클릭하고 에이전트가 BP_Area_Lane2 영역으로 목적지에 도달하는 것을 확인합니다.
섹션 결과
이 섹션에서는 두 개의 내비게이션 쿼리 필터(Navigation Query Filter) 를 생성하고 세 개의 영역 클래스(Area Class) 를 추가했습니다. 또한 여러 개의 내비게이션 쿼리 필터 를 사용하는 상황에 영역 클래스 에 할당되는 비용 값을 변경하여 에이전트의 내비게이션을 수정했습니다.