내비게이션 메시 수정하기

이 가이드에서는 언리얼 엔진에서 내비게이션 메시를 수정하는 방법을 설명합니다.

Choose your operating system:

Windows

macOS

Linux

개요

언리얼 엔진의 내비게이션 시스템(Navigation System) 은 인공 지능 에이전트에게 경로 탐색 기능을 제공합니다. 시작 위치와 목적지 사이의 경로를 찾기 위해 내비게이션 메시(Navigation Mesh)가 월드 콜리전 지오메트리에서 생성됩니다.

디폴트 세팅에서는 내비게이션 메시를 타일로 분할하므로 일부분만 다시 만들 수 있습니다. 결과 메시는 폴리곤으로 구성되며 각 폴리곤에 비용이 할당됩니다. 최적의 경로를 결정하는 동안 경로 찾기 알고리즘은 목적지까지의 비용이 가장 낮은 경로를 찾으려고 시도합니다.

내비게이션 시스템에는 다양한 컴포넌트와 세팅이 포함되어, 이러한 세팅으로 폴리곤 비용 등 내비게이션 메시의 생성 방식을 수정할 수 있습니다. 이는 에이전트가 레벨 내에서 이동하는 방식에 영향을 미칩니다.

목표

이 퀵스타트 가이드에서는 내비게이션 모디파이어 볼륨(Navigation Modifier Volumes) , 내비게이션 프록시 링크(Navigation Proxy Links) , 런타임에서 내비게이션에 영향을 미치는 블루프린트 액터를 사용하여 내비게이션 메시를 수정하는 방법을 알아봅니다.

세부 목표

  • 내비게이션 모디파이어 볼륨을 사용하여 특정 영역의 내비게이션 메시 비용을 변경합니다.

  • 내비게이션 프록시 링크를 사용하여 다른 방식으로는 액세스가 불가능한 두 영역을 연결합니다.

  • 스마트 프록시 링크(Smart Proxy Link)를 사용하여 에이전트가 플랫폼 사이를 점프하며 목표로 향하게 합니다.

  • 움직이는 블루프린트 액터를 생성하여 내비게이션 메시를 런타임에 동적으로 재생성하는 방법을 알아봅니다.

1 - 필수 구성

내비게이션 시스템 수정 준비 가이드 를 따르거나 전체 샘플 프로젝트를 다운로드하고, LevelModNavigation_0 레벨을 연 뒤에 다음 섹션으로 넘어갑니다.

2 - 내비게이션 모디파이어 볼륨 사용하기

내비게이션 모디파이어 볼륨(Navigation Modifier Volumes) 은 볼륨 셰이프를 사용하여 내비게이션 메시에 내비게이션 영역 클래스(Navigation Area Class)를 적용합니다. 내비게이션 영역 클래스를 사용하여 볼륨 스페이스 내의 폴리곤 프로퍼티를 변경하고 이동 비용을 수정할 수 있습니다.

폴리곤 프로퍼티는 내비게이션 모디파이어 볼륨의 적절한 영역 클래스(Area Class) 에 의해 정의됩니다. 이 클래스는 내비게이션 메시에 가해지는 이펙트를 결정합니다. 내장 클래스를 사용하여 메시를 수정하거나 커스텀 구현을 생성할 수 있습니다.

우선 내장 클래스를 사용하여 레벨 내에서 내비게이션 메시를 수정하겠습니다.

  1. 액터 배치(Place Actors) 패널에서 내비 모디파이어 볼륨(Nav Modifier Volume) 을 검색합니다. 내비 모디파이어 볼륨 액터를 레벨로 드래그합니다. 기본적으로 볼륨 내에는 내비게이션 메시가 생성되어 있지 않습니다.

    내비 모디파이어 볼륨 액터를 레벨로 드래그합니다

  2. 볼륨을 이동 하고 스케일 조절 하여 아래와 같은 영역을 덮습니다. 이제 에이전트가 하단의 스피어 에 도달하려면 볼륨을 우회하여 레벨 왼쪽으로 이동해야 합니다. 이 영역으로 게임 내에서 에이전트가 통과하지 못하는 장애물을 나타낼 수 있습니다.

    볼륨을 이동하고 스케일 조절하여 아래와 같은 영역을 덮습니다

  3. 위 단계를 반복하여 맵 반대편에 영역을 하나 더 생성합니다. 볼륨의 스케일을 조절할 때 양쪽에 에이전트가 이동할 공간을 남깁니다.

    위 단계를 반복하여 맵 반대편에 영역을 하나 더 생성합니다

  4. 내비 모디파이어 볼륨(Nav Modifier Volume) 을 레벨로 하나 더 드래그합니다. 디테일(Details) 패널로 이동하여 영역 클래스(Area Class) 옆의 드롭다운 을 클릭합니다. 목록에서 NavArea_Obstacle 클래스를 선택합니다. 이 내장 클래스는 볼륨 내 영역에 디폴트 값(녹색의 NavArea_Default ) 대비 높은 내비게이션 비용을 할당합니다. 그러면 에이전트는 목적지까지 가는 더 저렴한 경로를 찾지 못하는 한 해당 영역을 회피합니다.

    목록에서 NavArea_Obstacle 클래스를 선택합니다

    볼륨 내 영역은 디폴트 내비게이션 메시에 비해 내비게이션 비용이 높습니다

  5. 볼륨을 두 번 복제해서 스피어 주변에 다음과 같은 모양을 만듭니다. 그러면 스피어에 도달하려는 에이전트는 볼륨을 우회하여 이동하게 됩니다.

    볼륨을 두 번 복제합니다

    볼륨을 하나 더 추가해서 스피어 주변 영역을 볼륨으로 완전히 둘러싸더라도, 이 볼륨은 유효한 경로이므로 에이전트는 목적지에 도달할 것입니다. 반면에 볼륨의 영역 클래스를 NavArea_Null로 변경하면 에이전트는 타깃으로 가는 적합한 경로를 찾지 못하므로 목적지에 도달하지 못할 것입니다. NavArea_Null은 비용을 무한대로 적용하여 영향받는 영역 내에 내비게이션 메시가 생성되지 않게 하기 때문입니다.

  1. 시뮬레이트(Simulate) 를 클릭하고 에이전트가 스피어 사이로 어떻게 움직이는지 확인합니다. 이는 내비게이션 메시가 생성된 방식에 따라 변경 사항이 어떻게 영향받는지 보여줍니다.

    시뮬레이트를 클릭하고 에이전트가 구체 사이로 어떻게 움직이는지 확인합니다

섹션 결과

이 섹션에서는 내비 모디파이어 볼륨(Nav Modifier Volume) 을 사용하여 내비게이션 메시가 생성되는 방식을 변경했습니다. 또한 언리얼 엔진에서 사용 가능한 내장 영역 클래스도 알아보았습니다.

사용 가능한 내비 모디파이어 볼륨 영역 클래스

영역 클래스

설명

NavArea_Default

볼륨 내 영역과 내비게이션 메시에 기본적으로 동일한 내비게이션 비용을 할당합니다.

NavArea_LowHeight

에이전트가 지나가지 못하게 막는 낮은 높이가 있는 이동 조건에 일치하는 영역을 나타냅니다. 내비게이션 메시는 이 볼륨 내에 내비게이션 데이터를 생성하지 않습니다.

NavArea_Null

볼륨 내의 빈 영역을 나타냅니다. 내비게이션 메시는 이 볼륨 내에 내비게이션 데이터를 생성하지 않습니다.

NavArea_Obstacle

볼륨 내 영역에 높은 내비게이션 비용을 할당합니다.

3 - 내비게이션 링크 프록시 사용하기

내비게이션 링크 프록시(Navigation Link Proxy) 는 내비게이션 경로가 직접적으로 이어지지 않는 두 내비게이션 메시 영역을 연결합니다. 경로를 검색하는 동안 에이전트는 목적지에 도달하기 위한 추가 연결로 내비게이션 링크 프록시를 사용할 수 있습니다.

내비게이션 링크 프록시는 일반적으로 분리된 내비게이션 메시를 연결하는 다리를 생성하고, 목적지로 가는 연속된 경로를 이용할 수 없을 때 에이전트가 목적지를 향해 플랫폼에서 뛰어내리거나 점프하도록 지시하는 데 사용됩니다.

두 영역을 연결하는 다리 생성하기

  1. 첫 번째 내비 모디파이어 볼륨(Nav Modifier Volume) 을 선택하고 아래와 같이 길이가 바닥 전체와 같아지도록 크기를 조정합니다. 그러면 에이전트가 하단의 구체에 도달하지 못하도록 차단합니다.

    첫 번째 내비 모디파이어 볼륨을 선택하고 길이가 바닥 전체와 같아지도록 크기를 조정합니다.

  2. 액터 배치(Place Actors) 패널에서 큐브(Cube) 액터를 레벨로 드래그합니다. X = 4, Y = 1, Z =0.2로 스케일을 조절하고 아래와 같이 배치합니다.

    큐브 액터를 레벨로 드래그하고 X = 4, Y = 1, Z =0.2로 스케일을 조절합니다

  3. 아래와 같이 큐브 를 복제하고 레벨 반대편으로 이동합니다.

    큐브를 복제하고 레벨 반대편으로 이동합니다

    이 큐브 액터들은 레벨 내의 내비게이션 링크 프록시를 시각적으로 나타내는 역할입니다. 내비게이션 링크 프록시와 반드시 함께 사용할 필요는 없습니다.

  1. 액터 배치(Place Actors) 패널에서 Nav Link Proxy 를 검색합니다. Nav Link Proxy 액터를 레벨로 드래그합니다.

    Nav Link Proxy 액터를 레벨로 드래그합니다

  2. Nav Link Proxy 를 선택한 뒤 PointLinks[0].Left 핸들을 클릭하고 이동해서 메시 한쪽에 배치합니다. PointLinks[0].Right 핸들을 클릭하고 이동해서 아래와 같이 메시 반대쪽에 배치합니다.

    Nav Link Proxy가 내비게이션 메시의 표면과 연결되지 않으면 녹색 화살표가 사라집니다.

    PointLinks[0].Left 핸들을 클릭하고 이동해서 메시 한쪽에 배치하고 PointLinks[0].Right 핸들을 반대쪽에 배치합니다

    연결을 생성했으니 사이에 내비게이션 데이터가 없더라도 에이전트가 Nav Link Proxy 를 통해 이동할 수 있습니다.

  3. Nav Link Proxy 를 선택한 뒤 디테일(Details) 패널에서 Point Links 아래의 0 라벨이 붙은 섹션을 펼치고 Direction 드롭다운을 찾습니다. DirectionBoth Ways , Left to Right , Right to Left 중에서 선택할 수 있습니다. 이 예시에서는 Left to Right 를 선택합니다.

    Direction 드롭다운을 클릭하고 Left to Right를 선택합니다

  4. Nav Link Proxy 를 복제하여 레벨 반대편으로 이동합니다. 이 예시에서는 DirectionRight to Left 로 설정합니다.

    Nav Link Proxy를 복제하여 레벨 반대편으로 이동합니다. Direction을 Right to Left로 설정합니다

  5. 시뮬레이트(Simulate) 를 클릭하고 에이전트가 왼쪽 측면으로 들어가 오른쪽 측면으로 나와서 스피어 에 도달하는 것을 확인합니다.

    시뮬레이트를 클릭하고 에이전트가 왼쪽 측면으로 들어가 오른쪽 측면으로 나와서 스피어에 도달하는 것을 확인합니다

섹션 결과

Nav Link Proxy 를 사용하여 이용 가능한 경로가 없었던 내비게이션 메시 의 두 영역을 연결했습니다. Nav Link ProxyBoth Ways , Left to Right , Right to Left 등 다양한 방향으로 구성하는 방법도 알아보았습니다.

내비게이션 링크 프록시를 사용하여 에이전트가 플랫폼에서 떨어지게 하기

  1. Nav Link Proxy 를 레벨로 하나 더 드래그하여 아래와 같이 높은 플랫폼 끝에 배치합니다.

    Nav Link Proxy를 레벨로 하나 더 드래그하여 높은 플랫폼 끝에 배치합니다

  2. PointLinks[0].Left 를 선택하고 플랫폼 끝에 배치한 뒤 PointLinks[0].Right 를 선택하고 바닥과 겹치도록 아래에 배치합니다.

    PointLinks[0].Left를 선택하고 플랫폼 끝에 배치한 뒤 PointLinks[0].Right를 선택하고 아래에 배치합니다

  3. 디테일(Details) 패널로 이동하여 Point Links 아래의 0 라벨이 붙은 섹션을 펼치고 DirectionLeft to Right 로 설정합니다.

    Direction을 Left to Right로 설정합니다

  4. 시뮬레이트(Simulate) 를 클릭하면 이제 에이전트가 플랫폼에서 떨어져서 목적지에 도달하는 것을 확인할 수 있습니다.

    이제 에이전트가 플랫폼에서 떨어져서 목적지에 도달할 수 있습니다

섹션 결과

이 섹션에서는 Nav Link Proxy 를 사용하여 에이전트가 플랫폼에서 떨어져서 목적지에 도달하게 했습니다.

이 섹션에서는 Nav Link Proxy스마트 링크(Smart Link) 를 사용하여 에이전트가 한 플랫폼에서 다른 플랫폼으로 점프하게 하겠습니다.

  1. 플랫폼 메시를 선택하고 Alt 를 누른 채 드래그하여 복제합니다.

    플랫폼 메시를 선택하고 Alt를 누른 채 드래그하여 복제합니다

  2. 아래와 같이 새 플랫폼의 크기를 조정하고 위로 이동합니다.

    새 플랫폼의 크기를 조정하고 위로 이동합니다

  3. 스피어 액터를 복제하여 플랫폼 위에 배치합니다.

    스피어 액터를 복제하여 플랫폼 위에 배치합니다

  4. 콘텐츠 드로어(Content Drawer) 에서 우클릭하고 기본 에셋 생성(Create Basic Asset) 섹션의 블루프린트 클래스(Blueprint Class) 를 선택합니다.

    기본 에셋 생성 섹션의 블루프린트 클래스를 선택합니다

  5. 부모 클래스 선택(Pick Parent Class) 창에서 모든 클래스(All Classes) 섹션으로 이동하여 화살표를 펼칩니다. Nav Link Proxy 를 검색하여 선택하고 선택(Select) 을 클릭합니다. 블루프린트를 BP_NavProxyLink 로 명명합니다.

    Nav Link Proxy를 검색하여 선택하고 선택을 클릭합니다

    블루프린트 BP_NavProxyLink로 명명합니다

  6. BP_NavProxyLink 를 더블클릭하여 엽니다. 이벤트 그래프(Event Graph) 내에서 우클릭하여 이벤트 Receive Smart Link Reached(Event Receive Smart Link Reached) 를 검색하고 선택합니다.

    이벤트 그래프 내에서 우클릭하고 이벤트 Receive Smart Link Reached를 검색하고 선택합니다

  7. 이벤트 Receive Smart Link Reached 노드의 Agent 핀에서 드래그하여 Character 에 형변환(Cast to Character) 을 검색하고 선택합니다.

    이벤트 Receive Smart Link Reached 노드의 Agent 핀에서 드래그하여 Character 에 형변환을 검색하고 선택합니다

  8. Character 에 형변환 노드의 As Character 핀에서 드래그하여 변수로 승격(Promote to variable) 을 선택합니다.

    Character 에 형변환 노드의 As Character 핀에서 드래그하여 변수로 승격을 선택합니다

  9. As Character 노드의 실행(execution) 핀에서 드래그하여 Suggest Projectile Velocity Custom Arc 를 검색하고 선택합니다.

    As Character 노드에서 드래그하여 Suggest Projectile Velocity Custom Arc를 검색하고 선택합니다

  10. As Character 노드의 파란색 핀에서 드래그하여 GetActorLocation 을 검색하고 선택합니다. GetActorLocation 노드의 Return Value 핀을 Suggest Projectile Velocity Custom Arc 노드의 Start Pos 핀에 연결합니다.

    As Character 노드에서 드래그하여 GetActorLocation을 검색하고 선택합니다. GetActorLocation을 Suggest Projectile Velocity Custom Arc 노드의 Start Pos 핀에 연결합니다

  11. 이벤트 Receive Smart Link Reached 노드의 Destination 핀에서 드래그하여 Suggest Projectile Velocity Custom Arc 노드의 End Pos 핀에 연결합니다.

    이벤트 Receive Smart Link Reached 노드의 Destination 핀에서 드래그하여 Suggest Projectile Velocity Custom Arc 노드의 End Pos 핀에 연결합니다

  12. As Character 변수를 이벤트 그래프(Event Graph) 로 드래그하고 Get As Character 를 선택합니다. As Character 노드에서 드래그하여 Launch Character 를 검색하고 선택합니다. XYOverrideZOverride 체크박스를 활성화합니다.

    As Character 노드에서 드래그하여 Launch Character를 검색하고 선택합니다

  13. Suggest Projectile Velocity Custom Arc 노드에서 드래그하여 Delay 를 검색하고 선택합니다. Duration 을 0.1로 설정합니다. Delay 노드의 Completed 핀을 Launch Character 노드에 연결합니다.

    Delay 노드를 추가하고 Duration을 0.1로 설정합니다. Delay 노드를 Launch Character 노드에 연결합니다

  14. Suggest Projectile Velocity Custom Arc 노드의 Out Launch Velocity 핀에서 드래그하여 vector * float 를 검색하고 선택합니다.

    Suggest Projectile Velocity Custom Arc 노드의 Out Launch Velocity 핀에서 드래그하여 vector * float를 검색하고 선택합니다

  15. Multiplication 노드의 노란색 핀을 Launch Character 노드의 Launch Velocity 핀에 연결합니다. 곱셈 노드의 녹색 핀을 우클릭하고 변수로 승격(Promote to variable) 을 선택합니다.

    곱셈 노드의 녹색 핀을 우클릭하고 변수로 승격을 선택합니다

  16. New Var 0 노드를 선택하고 디테일(Details) 패널에서 변수 이름을 JumpBoost 로 변경합니다. 기본값을 1 로 설정합니다. 아래와 같이 인스턴스 편집가능(Instance Editable) 체크박스를 활성화합니다.

    변수 이름을 JumpBoost로 변경하고 기본값을 1로 설정합니다. 인스턴스 편집가능 체크박스를 활성화합니다

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

    완성된 블루프린트 구성

  18. BP_NPC_ModNavMesh 캐릭터를 레벨에서 선택하고 디테일(Details) 패널에서 타깃 목록(Target List) 옆의 더하기(Add) (+) 버튼을 클릭하여 새 엔트리를 추가합니다. 플랫폼에 추가한 마지막 스피어 액터를 검색하고 선택합니다.

    플랫폼에 추가한 마지막 스피어 액터를 검색하고 선택합니다

  19. 아래와 같이 BP_NavProxyLink 블루프린트 액터를 플랫폼에 드래그하고 연결을 조정합니다.

    BP_NavProxyLink 블루프린트 액터를 플랫폼에 드래그하고 연결을 조정합니다

  20. BP_NavProxyLink 블루프린트 액터를 선택한 뒤 디테일(Details) 패널로 이동하여 Copy End Points from Simple Link to Smart Link 버튼을 클릭합니다. Smart Link Is Relevant 체크박스를 활성화합니다.

    Copy End Points from Simple Link to Smart Link 버튼을 클릭합니다

  21. 시뮬레이트(Simulate) 를 클릭하고 에이전트가 점프하여 마지막 스피어에 도달하는 것을 확인합니다.

    시뮬레이트를 클릭하고 에이전트가 점프하여 마지막 스피어에 도달하는 것을 확인합니다

    내비게이션 링크 프록시는 근접한 내비게이션 메시 타일만 연결할 수 있습니다. RecastNavMesh-Default 액터를 선택하고 타일 바운드 그리기(Draw Tile Bounds) 체크박스를 활성화하여 타일을 시각화할 수 있습니다.

섹션 결과

이 섹션에서는 커스텀 내비 프록시 링크(Nav Proxy Link) 블루프린트를 생성하고 이를 사용하여 에이전트를 플랫폼으로 점프하게 하는 방법을 알아봤습니다.

4 - 런타임에서 내비게이션 메시 생성하기

언리얼 엔진에는 세 가지 내비게이션 메시 생성 모드가 있습니다.

생성 모드

설명

Static

내비게이션 메시가 오프라인에서 생성되고 레벨과 함께 저장됩니다. 내비게이션 메시는 런타임에서 로드되며 변경이 불가능합니다.

Dynamic

내비게이션 메시가 오프라인에서 생성되고 레벨과 함께 저장되거나 런타임에서 만들어집니다. 런타임에서 내비게이션 메시가 사용하는 내비게이션 관련 데이터가 업데이트될 수 있고, 생성은 데이터 변경에 영향받은 타일에서 수행됩니다.

Dynamic Modifiers Only

내비게이션 메시가 오프라인에서 생성되고 레벨과 함께 저장됩니다. 런타임에서는 내비게이션 영역, 내비게이션 링크, 다이내믹 오브젝트 등의 내비게이션 모디파이어(Navigation Modifier)만 비용 또는 블록 영역을 변경하여 기존 내비게이션 메시를 수정할 수 있습니다. 런타임에서 새로운 내비게이션 메시 표면은 생성되지 않습니다.

이 메서드는 내비게이션 메시가 콜리전 데이터를 캐시할 수 있게 함으로써 영향받는 타일의 프로세싱 비용을 최대 50% 낮춥니다.

고급 사용자가 장점과 한계를 신중하게 고려한 뒤 사용해야 하는 모드입니다.

기본적으로 내비게이션 메시는 Static 으로 환경설정됩니다. 그러나 내비게이션 메시 생성을 런타임에서 변경할 수 있도록 다이내믹 모드 중 하나로 설정할 수도 있습니다.

런타임 생성 사용하기(Dynamic Modifiers Only)

  1. 런타임 생성(Runtime Generation) 세팅을 변경하려면 메뉴 바에서 세팅(Settings) > 프로젝트 세팅(Project Settings) 으로 이동합니다.

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

  2. 내비게이션 메시(Navigation Mesh) 세팅으로 이동한 후 런타임(Runtime) 섹션에서 Runtime Generation 드롭다운을 클릭합니다. 이 예시에서는 Dynamic Modifiers Only 를 선택합니다.

    Runtime Generation 드롭다운을 클릭한 후 Dynamic Modifiers Only를 선택합니다

  3. 콘텐츠 드로어(Content Drawer) 에서 우클릭하고 기본 에셋 생성(Create Basic Asset) 섹션의 블루프린트 클래스(Blueprint Class) 를 선택합니다.

    기본 에셋 생성 섹션의 블루프린트 클래스를 선택합니다

  4. 일반(Common) 섹션의 액터(Actor) 클래스를 선택합니다. 블루프린트를 BP_RotatingActor 로 명명합니다.

    일반 클래스 섹션의 액터 클래스를 선택합니다

    블루프린트를 BP_RotatingActor로 명명합니다

  5. BP_RotatingActor 블루프린트를 더블클릭하여 엽니다. +추가(+Add) 드롭다운을 클릭한 뒤 큐브(Cube) 를 검색하고 선택합니다. 큐브의 스케일을 X = 4, Y = 1.5, Z = 1로 조절합니다.

    컴포넌트 추가 드롭다운을 클릭한 뒤 큐브를 검색하고 선택합니다

    큐브의 스케일을 X = 4, Y = 1.5, Z = 1로 조절합니다.

  6. +추가(+Add) 드롭다운을 클릭한 뒤 Rotating Movement 를 검색하고 선택합니다.

    컴포넌트 추가 드롭다운을 클릭한 뒤 Rotating Movement를 검색하고 선택합니다

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

  8. BP_RotatingActor 블루프린트 액터를 레벨로 드래그하고 시뮬레이트(Simulate) 를 클릭합니다. 내비게이션 메시가 회전 메시와 함께 업데이트되지 않는 것을 확인할 수 있습니다. 이는 Dynamic Modifier Only 런타임 생성 모드가 NavModifier 컴포넌트를 갖는 액터에서만 작동하기 때문입니다.

    BP_RotatingActor 블루프린트 액터를 레벨로 드래그하고 시뮬레이트를 클릭합니다

  9. BP_RotatingActor 블루프린트로 돌아가서 +추가(+Add) 드롭다운을 클릭합니다. Nav Modifier 를 검색하여 선택합니다.

    컴포넌트 추가 드롭다운을 클릭하여 Nav Modifier를 검색하고 선택합니다

  10. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다. 시뮬레이트(Simualte) 를 클릭하여 차이를 확인합니다. 레벨에서 메시가 회전함에 따라 내비게이션 메시가 제대로 업데이트되는 것을 확인할 수 있습니다.

    레벨에 새 내비게이션 메시가 생성되지는 않는다는 점에 주목하세요(생성 중인 파일은 빨간색으로 표시됩니다). 내비게이션 모디파이어는 기존 내비게이션 메시를 변경하기만 합니다.

    레벨에서 메시가 회전함에 따라 내비게이션 메시가 제대로 업데이트되는 것을 확인할 수 있습니다

섹션 결과

이 섹션에서는 런타임 생성 Dynamic Modifiers Only 를 사용하여 내비게이션 메시가 게임플레이 중에 재생성되게 하는 방법을 알아보았습니다. 또한 NavModifier 컴포넌트가 있는 단순 회전 블루프린트 액터로 테스트하고 결과를 확인했습니다.

런타임 생성 사용하기(Dynamic)

  1. 콘텐츠 드로어(Content Drawer) 에서 우클릭하고 기본 에셋 생성(Create Basic Asset) 섹션의 블루프린트 클래스(Blueprint Class) 를 선택합니다.

    기본 에셋 생성 섹션의 블루프린트 클래스를 선택합니다

  2. 일반(Common) 섹션의 액터(Actor) 클래스를 선택합니다. 블루프린트를 BP_MovingActor 로 명명합니다.

    일반 클래스 섹션의 액터 클래스를 선택합니다

    블루프린트를 BP_MovingActor로 명명합니다

  3. BP_MovingActor 블루프린트를 더블클릭하여 엽니다. +추가(+Add) 드롭다운을 클릭한 뒤 스피어(Sphere) 를 검색하고 선택합니다. 스피어의 스케일을 X = 2, Y = 2, Z = 2로 조절합니다.

    컴포넌트 추가 드롭다운을 클릭한 뒤 스피어를 검색하고 선택합니다

  4. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 커스텀 이벤트 추가(Add Custom Event) 를 검색하고 선택합니다. 이벤트를 MoveForward 로 명명합니다. 이 단계를 반복하여 또 다른 이벤트 MoveBackwards 를 생성합니다.

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

    이 단계를 반복하여 또 다른 이벤트 MoveBackwards를 생성합니다

  5. MoveForward 노드에서 드래그하여 타임라인 추가(Add Timeline) 를 검색하고 선택합니다. 타임라인을 TM_MoveObject 로 명명합니다. MoveBackwards 노드를 TM_MoveObject 노드의 Reverse 핀에 연결합니다.

    MoveForward 노드에서 드래그하여 타임라인 추가를 검색하고 선택합니다

    MoveBackwards 노드를 타임라인의 Reverse 핀에 연결합니다

  6. TM_MoveObject 노드를 더블클릭하여 엽니다. +트랙(+Track) 버튼을 클릭하여 새 Float 트랙을 생성합니다. 트랙을 Alpha 라고 명명합니다.

    Float 트랙 추가 버튼을 클릭하여 새 Float 트랙을 생성합니다.

    트랙을 Alpha라고 명명합니다

  7. 그래프에서 우클릭한 뒤 CurveFloat_1 에 키 추가(Add key to CurveFloat_1) 를 선택합니다. 시간(Time) = 0 및 값(Value) = 0 을 입력합니다.

    그래프에서 우클릭한 뒤 CurveFloat_1 에 키 추가를 선택합니다

    시간 = 0 및 값 = 0을 입력합니다

  8. 이전 단계를 반복하고 시간 = 5 및 값 = 1 을 입력합니다.

  9. 스피어(Sphere) 컴포넌트를 이벤트 그래프(Event Graph) 에 드래그하여 노드를 생성합니다. 스피어 노드에서 드래그하여 SetRelativeLocation 을 검색하고 선택합니다.

    스피어 노드에서 드래그하여 SetRelativeLocation을 검색하고 선택합니다

  10. TM_MoveObject 노드의 Update 핀을 SetRelativeLocation 노드에 연결합니다. SetRelativeLocation 노드의 New Location 핀을 우클릭하고 구조체 핀 분할(Split Struct Pin) 을 선택합니다.

    SetRelativeLocation 노드의 New Location 핀을 우클릭하고 구조체 핀 분할을 선택합니다

  11. SetRelativeLocation 노드의 New Location X 핀에서 드래그하여 Lerp 를 검색하고 선택합니다. TM_MoveObject 노드의 Alpha 핀을 Lerp 노드의 Alpha 핀에 연결합니다.

    SetRelativeLocation 노드의 New Location X 핀에서 드래그하여 Lerp를 검색하고 선택합니다

    TM_MoveObject 노드의 Alpha 핀을 Lerp 노드의 Alpha 핀에 연결합니다

  12. Lerp 노드의 B 핀을 우클릭하여 변수로 승격(Promote to Variable) 을 선택합니다. 디테일(Details) 패널에서 변수 이름을 Distance 로 변경합니다. 인스턴스 편집가능(Instance Editable) 체크박스를 선택합니다.

    Lerp 노드의 B 핀을 우클릭하여 변수로 승격을 선택합니다

    변수 이름을 Distance로 변경합니다. 인스턴스 편집가능 체크박스를 선택합니다

  13. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다. Distance 의 기본값을 1000 으로 설정합니다.

  14. TM_MoveObject 타임라인의 Finished 핀에서 드래그하여 Delay 를 검색하고 선택합니다. Duration1 로 설정합니다.

    타임라인의 Finished 핀에서 드래그하여 Delay를 검색하고 선택합니다. Duration을 1로 설정합니다

  15. Delay 노드의 Completed 핀에서 드래그하여 Branch 를 검색하고 선택합니다.

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

  16. Branch 노드의 Condition 핀을 우클릭하고 변수로 승격(Promote to Variable) 을 선택합니다. 디테일(Details) 패널로 이동하여 변수 이름을 Forward 로 변경합니다.

    Branch 노드의 Condition 핀을 우클릭하고 변수로 승격을 선택합니다

    변수 이름을 Forward로 변경합니다

  17. Forward 변수를 이벤트 그래프(Event Graph) 로 드래그한 뒤 Set Forward 를 선택합니다. BranchTrue 핀을 Set Forward 노드에 연결합니다. Set Forward 노드에서 드래그하여 Move Backwards 를 검색하고 선택합니다.

    Branch의 True 핀을 Set Forward 노드에 연결합니다. Set Forward 노드에서 드래그하여 Move Backwards를 검색하고 선택합니다

  18. Forward 변수를 이벤트 그래프(Event Graph) 로 드래그한 뒤 Set Forward 를 선택합니다. Branch False 핀을 Set Forward 노드에 연결합니다. Set Forward 노드의 Forward 체크박스를 활성화 합니다. Set Forward 노드에서 드래그하여 MoveForward 를 검색하고 선택합니다.

    Branch의 False 핀을 Set Forward 노드에 연결합니다. Forward 체크박스를 활성화합니다. Set Forward 노드에서 드래그하여 MoveForward를 검색하고 선택합니다

  19. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 이벤트 BeginPlay(Event BeginPlay) 를 검색하고 선택합니다. Begin Play 이벤트 노드에서 드래그하여 MoveForward 를 검색하고 선택합니다.

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

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

  20. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다. 아래에서 완성된 블루프린트를 볼 수 있습니다.

    완성된 블루프린트 구성

  21. BP_MovingActor 블루프린트 액터를 레벨로 드래그하고 시뮬레이트(Simulate) 를 클릭합니다. 내비게이션 메시가 액터의 움직임과 함께 업데이트되지 않는 것을 확인할 수 있습니다.

    BP_MovingActor 블루프린트 액터를 레벨로 드래그하고 시뮬레이트(Simulate)를 클릭합니다

  22. 세팅(Settings) > 프로젝트 세팅(Project Settings) 을 클릭하고 내비게이션 메시(Navigation Mesh) 세팅으로 이동합니다.

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

  23. 런타임(Runtime) 섹션에서 Runtime Generation 드롭다운을 클릭하고 Dynamic 을 선택합니다.

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

  24. 레벨로 돌아가서 시뮬레이트(Simulate) 를 클릭합니다. 이제 내비게이션 메시가 제대로 업데이트되는 것을 볼 수 있습니다.

    이 섹션에서 사용한 예시는 내비게이션 메시의 런타임 생성을 지속적으로 강제하므로 연산 비용이 높습니다. 이 예시는 모범 사례를 나타내지 않으며, 시연 목적으로만 사용되었습니다.

    내비게이션 메시가 이동하는 액터에 맞게 업데이트됩니다

    내비게이션 메시가 회전하는 액터에 맞게 업데이트됩니다

    최종 레벨 구성

섹션 결과

이 섹션에서는 Dynamic 런타임 생성 세팅을 사용하여 게임플레이 중에 내비게이션 메시를 재생성하는 방법을 알아보았습니다. 또한 레벨에서 스피어 메시를 움직이는 블루프린트를 생성하고 내비게이션 메시의 지속적인 재생성을 강제하여 결과를 테스트해 보았습니다.

태그