[UE5] SimpleShooter-1

칼든개구리·2024년 12월 16일
0

[언리얼TO리얼]

목록 보기
29/42

게임의 계획

  1. 플레이어 이동
  2. 애니메이션
  3. 슈팅
  4. Health/Death
  5. 적 AI
  6. 승패 조건

Pawn or Character?

폰은 플레이어로서 우리들이 소유(제어)할 수 있는 모든 것을 말한다.
캐릭터도 역시 폰이며 폰 클래스로부터 직접 상속 된다. 그래서 폰이 할 수 있는 모든 것을 할 수있다. 그리고 더 많은 것을 할 수 있어 캐릭터는 특수한 폰이다.
캐릭터는 캐릭터같다는 특징이 있는데 (?) 이것은 이동을 예로 들면 마치 실제 사람처럼 이동을 하고 바닥에서 움직이거나 점프나 달리는 등 모든 동작을 할 수 있다. 이것은 폰이 아닌 캐릭터의 영역이다. 그리고 Nav Mesh 이동 같은 것도 추가한다. 이건 ai의 부분에서 더 자세하게 적어볼까 한다. 간단하게 캐릭터를 움직이고 장애물을 피하는 등의 이동을 도와준다.


💡Nav mesh란 뭘까?
언리얼 엔진의 공식문서를 바탕으로 정리를 해볼까 한다
언리얼 엔진 네비게이션 시스템(Unreal Engine Navigation System)은 인공 지능 에이전트에게 경로 찾기 기능을 제공합니다. 시작 위치와 목적지 사이의 경로를 찾기 위해 네이게이션 메시(Navigation Mesh)가 월드 콜리전 지오메트릭에서 생성됩니다. 이 간호화된 폴리곤 메시는 레벨에서 이동 가능한 공간을 나타냅니다. 디폴트 세팅에서는 네비게이션 메시를 타일로 분할하므로 일부분만 다시 빌드할 수 있습니다. 결과 메시에서는 폴리곤으로 구성되며 각 폴리곤에 비용이 할당됩니다. 경로를 찾는 동안 경로 찾기 알고리즘은 목적지까지 비용이 가장 낮은 최적의 경로를 찾으려고 시도합니다.


예시) 3인칭 블루프린트와 시작용 컨텐츠 없음으로 프로젝트 하나 생성

1. 네비게이션 메시 빌드


예시에서는 네이게이션 메시 바운드 볼륨을 사용하여 레벨에서 네비게이션을 생성할 영역을 지정합니다. 이 정보는 에이전트가 레벨을 이동하여 목적지까지 도달하는데 사용됩니다.
-액터 배치(Place Actors) 패널로 가서 NavMeshBoundsVolume 을 검색하고 레벨로 드래그합니다.
2.NavMeshBoundVolume을 선택한 채 디테일 패널에서 트랜스 폼을 조절해 아래 사진과 같이 플레이 영역을 뒤덮게 합니다

언리얼 엔진은 네비메시 바운드 볼륨 액터가 레벨에 추가되거나 크기 조정되는 즉시 자동으로 네비게이션 메시를 생성합니다.
내비게이션 메시가 계단에서 비주얼 아티팩트를 일으키는 것이 보입니다. 내비게이션 메시는 레벨의 콜리전을 간소화해서 표현하기 때문입니다. 아웃라이너(Outliner) 창에서 RecastNavMesh-Default 액터를 선택한 뒤 디테일 (Details ) 패널로 이동합니다. 디스플레이(Display) 섹션으로 이동하여 오프셋 그리기(Draw Offset) 값을 50 으로 설정합니다. 그러면 내비게이션 메시가 그려진 곳에서 높이 오프셋이 조절되어 더 알아보기 쉽습니다.

네비게이션 메시 시각화하기

다양한 네비게이션 메시 세팅을 수정하는 방법과 레벨에서 메시를 시각화 하는 방식을 변경하는 방법에 대해서 알아본다
우선 아웃라이너에서 RecastNavMesh_Default를 선택한다

액터를 선택한 상태로 디테일 패널을 아래로 스크롤하여 디스플레이 섹션으로 이동한다. 폴리곤을 보기 위해 폴리 에지 그리기를 선택한다


타일 바운드 그리기 체크박스를 활성화 하여 개별 네비게이션 타일을 시각화 할 수 있다.

첫 에이전트 생성하기

간단한 에이전트를 생성하고 주변에서 랜덤 위치를 선택하여 이동하는 식으로 레벨을 돌아다니게 하겠습니다. 이 에이전트는 목적지에 도달하면 몇 초 대기한 뒤 같은 프로세스를 반복할 것이다.
BP_Thirdperson을 복사해 이름을 BP_NPC_NavMesh로 변경하고 이벤트 그래프에서 모든 입력 노드를 삭제합니다.

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

이벤트 그래프에서 Get Actor Location을 추가해준다

GetActorLocation 노드에서 드래그하여 GetRandomReachablePointInRadius 를 검색하고 선택합니다. Radius 를 1,000유닛으로 설정합니다.

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

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

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

이벤트 그래프 를 우클릭한 뒤 셀프 레퍼런스 가져오기(Get a reference to self) 를 검색하고 선택합니다.
Self 노드를 AI MoveTo 노드의 Pawn 핀에 연결합니다. 아래와 같이 Random Location 노드의 노란색 핀을 AI MoveTo 노드의 Destination 핀에 연결합니다.

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

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

BP_NPC_NavMesh 블루프린트를 레벨로 드래그하고 시뮬레이트(Simulate) 를 클릭합니다. 에이전트가 레벨에서 돌아다니는 것을 볼 수 있습니다.


📝 TIL: Unreal Engine에서 Nav Mesh와 AI 활용하기
Pawn과 Character의 차이

  • Pawn: 플레이어가 제어할 수 있는 모든 오브젝트.
  • Character: Pawn을 상속받으며, 이동, 점프, 달리기 등의 캐릭터 특유의 동작을 지원.
    -Nav Mesh를 활용하여 AI가 장애물을 피하거나 경로를 찾는 데 유용.

💡 Nav Mesh란?
Nav Mesh (Navigation Mesh): AI 에이전트가 경로를 탐색하고 이동할 수 있도록 레벨의 이동 가능한 공간을 표현하는 폴리곤 메시.
주요 특징:

  • 레벨의 충돌 데이터를 기반으로 생성.
  • 경로 탐색 시 최적 경로를 계산.
  • 타일 단위로 분할되어 필요한 영역만 다시 빌드 가능.

💡 느낀 점
Nav Mesh와 블루프린트를 활용하면 간단한 AI 동작을 쉽게 구현 가능.
AI MoveTo 노드를 통해 이동 경로를 설정하고, 대기와 반복 로직을 추가해 기본적인 에이전트 행동을 구현할 수 있음.
Nav Mesh는 AI 개발에 핵심적인 역할을 하며, 다양한 설정을 통해 디테일한 경로 탐색이 가능

profile
메타쏭이

0개의 댓글