본문 바로가기

강동새싹언리얼수업/최종프로젝트

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

1 - 필수 설정

  1. 언리얼 프로젝트 브라우저(Unreal Project Browser)의 새 프로젝트 카테고리(New Project Categories) 섹션에서 게임(Games)  삼인칭(Third Person) 템플릿을 선택합니다.
  2. 블루프린트(Blueprint)  시작용 콘텐츠 없음(No Starter Content) 옵션을 선택한 뒤 생성(Create) 을 클릭합니다.
  3.  

섹션 결과

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

2 - 내비게이션 메시 빌드

이 섹션에서는 내비게이션 메시 바운드 볼륨(Navigation Mesh Bounds Volume) 을 사용하여 레벨에서 내비게이션을 생성할 영역을 지정합니다. 이 정보는 에이전트가 레벨을 이동하여 목적지에 도달하는 데 사용됩니다.

  1. 프로젝트의 디폴트 ThirdPersonExampleMap 에서 액터 배치(Place Actors) 패널로 가서 NavMeshBoundsVolume 을 검색하고 레벨로 드래그합니다.
  2. NavMeshBoundsVolume 을 선택한 채 디테일(Details) 패널에서 볼륨의 스케일을 X = 20, Y = 20, Z = 5로 조절합니다. 아래와 같이 볼륨을 움직여서 플레이 영역 전체를 덮게 합니다.
  3. 아웃라이너(World Outliner) 창에서 BP_ThirdPersonCharacter 블루프린트를 선택한 뒤 레벨에서 제거합니다.
  4. 키보드로 P 를 누르면 레벨에서 내비게이션 메시를 시각화할 수 있습니다. 내비게이션 메시는 기본적으로 아래 이미지에서와 같이 녹색으로 시각화됩니다.
  5. 언리얼 엔진은 내비메시 바운드 볼륨(Nav Mesh Bounds Volume) 액터가 레벨에 추가되거나 크기 조정되는 즉시 자동으로 내비게이션 메시를 생성합니다.
  6. 내비게이션 메시가 계단에서 비주얼 아티팩트를 일으키는 것이 보입니다. 내비게이션 메시는 레벨의 콜리전을 간소화해서 표현하기 때문입니다. 아웃라이너(Outliner) 창에서 RecastNavMesh-Default 액터를 선택한 뒤 디테일 (Details ) 패널로 이동합니다. 디스플레이(Display) 섹션으로 이동하여 오프셋 그리기(Draw Offset) 값을 50 으로 설정합니다. 그러면 내비게이션 메시가 그려진 곳에서 높이 오프셋이 조절되어 더 알아보기 쉽습니다.

섹션 결과

이 섹션에서는 내비메시 바운드 볼륨 액터를 레벨에 추가하고 플레이 영역에 맞게 스케일을 조절했습니다. 또한 P를 눌러서 최종 내비게이션 메시를 시각화하는 방법을 알아보았습니다.

 

 

4 - 첫 에이전트 생성하기

이 섹션에서는 간단한 에이전트를 생성하고 주변에서 랜덤 위치를 선택하여 이동하는 식으로 레벨에서 돌아다니게 하겠습니다. 이 에이전트는 목적지에 도착하면 몇 초 대기한 뒤 같은 프로세스를 반복할 것입니다.

  1. 콘텐츠 드로어(Content Drawer) 에서 우클릭하고 새 폴더(New Folder) 를 선택하여 새 폴더를 생성합니다. 폴더를 NavigationSystem 으로 명명합니다.
  2. 콘텐츠 드로어(Content Drawer) 에서 ThirdPersonBP > Blueprints 폴더로 이동하여 BP_ThirdPersonCharacter 블루프린트를 선택합니다. NavigationSystem 폴더로 드래그하고 여기에 복사(Copy Here) 옵션을 선택합니다.
  3. NavigationSystem 폴더로 이동하여 블루프린트 이름을 BP_NPC_NavMesh 로 변경합니다. 블루프린트를 더블클릭하여 열고 이벤트 그래프(Event Graph) 로 이동합니다. 모든 입력 노드를 선택해서 지웁니다.
  4. 이벤트 그래프 를 우클릭한 뒤 커스텀 이벤트 추가(Add Custom Event) 를 검색하고 선택합니다. 이벤트를 MoveNPC 로 명명합니다.
  5. 이벤트 그래프 를 우클릭한 뒤 Get Actor Location 을 검색하고 선택합니다.
  6. GetActorLocation 노드에서 드래그하여 GetRandomReachablePointInRadius 를 검색하고 선택합니다. Radius 를 1,000유닛으로 설정합니다.
  7. GetRandomReachablePointInRadius 노드의 Random Location 핀을 드래그하여 변수로 승격(Promote to variable) 을 선택합니다.
  8. 방금 만든 RandomLocation 노드에 MoveNPC 노드를 연결합니다.
  9. 이벤트 그래프(Event Graph) 를 우클릭한 뒤 AI MoveTo 를 검색하고 선택합니다. RandomLocation 노드를 AI MoveTo 노드에 연결합니다.
  10. 이벤트 그래프 를 우클릭한 뒤 셀프 레퍼런스 가져오기(Get a reference to self) 를 검색하고 선택합니다.
  11. Self 노드를 AI MoveTo 노드의 Pawn 핀에 연결합니다. 아래와 같이 Random Location 노드의 노란색 핀을 AI MoveTo 노드의 Destination 핀에 연결합니다.
  12. AI MoveTo 노드의 On Success 핀에서 드래그하여 Delay 를 검색하고 선택합니다. Delay 노드의 Duration  4 로 설정합니다. 아래와 같이 Delay 노드의 Completed 핀에서 드래그하여 Move NPC 를 검색하고 선택합니다.
  13. 위 단계를 반복하여 AI MoveTo 노드의 On Fail 핀에도 노드를 추가합니다. Delay 노드의 Duration 을 0.1로 설정합니다.
  14. 이벤트 그래프 를 우클릭한 뒤 이벤트 BeginPlay 를 검색하고 선택합니다. BeginPlay 이벤트 노드에서 드래그하여 MoveNPC 를 검색하고 선택합니다.
  15. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다.
  16. BP_NPC_NavMesh 블루프린트를 레벨로 드래그하고 시뮬레이트(Simulate) 를 클릭합니다. 에이전트가 레벨에서 돌아다니는 것을 볼 수 있습니다.

이번에는 AI들이 지정된 기둥들로 다니게 해보겠습니다.

일단 맵에 기둥들을 새웁니다. 적당히 실린더를 놓습니다.

BP_PatrolPoint라는 Actor블루프린트를 만들고 변수를 설정합니다.

BP_NPC에 기둥들을 찾에 BP_Patrol 변수에 저장하는 로직을 넣습니다.

BP_NPC에도 같은 변수를 만들어줘 복사해주면 됩니다.

TargetList중 한곳을 뽑아 그 위치를 중심으로 랜덤위치를 찾아 

AI MoveTo를 이용해서 움직이게 해줍니다.

'강동새싹언리얼수업 > 최종프로젝트' 카테고리의 다른 글

폰빙의 Possess  (0) 2024.03.02
Moving Actor - TimeLine Lerp  (0) 2024.02.28
NAV LINK PROXY  (1) 2024.02.28
AI 멀티 비헤이버트리  (1) 2024.02.27
1일차 프로토 레벨만들기  (0) 2024.02.16