[Sebastian Lague] A* Pathfinding (E02: node grid) Part 1

업데이트:     Updated:

카테고리:

태그: , ,

이 포스팅은 Sebastian Lague의 A* Pathfinding 영상을 기반으로 진행됩니다.
깃허브 주소: Sebistian Lague’s Github

 

✔️ 프로젝트 세팅

alt text

먼저 Unreal Engine을 켜고 사진과 같이 세팅해준다.

  1. 기본
  2. C++
  3. 시작 콘텐츠 체크 해제

여기서, 경로에 한글이 들어가지 않도록 주의한다.

image

프로젝트가 생성이 되면, 콘텐츠에 들어가 Blueprints, Maps, Materials 폴더를 추가해준다.

image

Maps 폴더 내에 ‘Pathfinding’이란 이름의 Level을 추가해준다.
Level이란, 유니티에서의 Scene과 같은 역할을 한다.

image

만든 Level을 클릭하면 전혀 보이는 것이 없는데, 이는 빛을 추가해주지 않았기 때문이다.

image

정육면체에 +가 붙은 아이콘을 클릭하여 ‘DirectionalLight, ExponentialHeightFog, SkyAtmosphere’를 추가해준다.

image

그리고 Plane 또한 추가하여 바닥을 생성해준다.

image

생성한 Plane의 스케일을 적당히 조절하여 땅을 넓혀준다.

image

이제 생성한 레벨을 메인으로 둬야한다.
그러기 위해 상단의 ‘편집 탭 - 프로젝트 세팅’ 으로 들어가준다.

image

‘맵 & 모드’의 에디터 시작 맵과 게임 기본 맵을 방금 만들어주었던 Pathfinding 레벨로 설정한다. 여기까지 해주었으면 기본적인 세팅은 마무리되었다.

📦 배치

👉🏻 클래스 생성

image

이제 본격적으로 시작할수 있다.
엔진 - 엔진 C++ 클래스 폴더에 들어가, 빈공간을 우클릭하고 새 C++ 클래스를 생성한다.

번거롭지만, 처음에는 C++ 클래스 폴더가 따로 없으므로, 사진과 같은 방법으로 클래스를 생성해주어야 한다.

image

부모 클래스를 액터로 선택한다.

image

Obstacle 이란 이름의 액터 클래스를 생성한다.

image

그러면 이제서야 C++ 클래스 폴더가 보이기 시작한다.
이제부턴 이 폴더에서 클래스를 편하게 생성할 수 있다.

image

이전과 같이 부모 클래스가 액터인 Grid 클래스를 새로 생성해준다.

image

Grid와 Obstacle 모두 블루프린트 클래스로 생성해주어야 한다.

image

아까 만들었던 Bluprints 폴더를 선택하고 이름 앞에 ‘BP_‘를 붙여준다.

image

위와 같은 방법으로 두개의 블루프린트 클래스를 생성해주었다.

image

Obstacle C++ 클래스를 클릭하여 Visual Studio를 켜주고 Obstacle.h에 들어가준다.
UStaticMeshComponent와 UBoxComponent를 추가한다.

액터에는 UBoxComponent가 포함되어있지 않으므로,
앞에 class를 붙여 선언해준뒤, cpp에서 #include 해주어야 한다.

image

Obstacle.cpp에 들어가 #include “Components/BoxComponents.h” 를 추가한다.

CreateDefaultSubobject를 통해 각 변수에 컴포넌트들을 넣어준다.
BoxCollision을 루트로 두고, Mesh를 루트의 자식으로 넣어준다.

image

언리얼로 돌아와, LiveCoding.Compile을 통해 컴파일을 진행한다.

image

아까 만들어주었던 BP_Obstacle로 들어가 풀 블루프린트 에디터를 열어준다.

image

스태틱 메시로는 Cube를 검색하여 넣어준다.
하지만 색깔이 너무 밋밋하고 구분이 가지 않는다.

👉🏻 머터리얼

image image

색깔을 넣어주기 위해 Meterials 폴더 내에 머터리얼을 만들어준다.
앞에 ‘M_‘을 붙여 생성해주는 것이 일반적이다.

image

머터리얼에 들어가 격자 화면을 우클릭하고 vectorParameter를 추가해준다.

image

원하는 색을 넣어준다.

image

이와 같은 방법으로 M_Grass와 M_Obstacle을 생성해주었다.

image

생성한 머터리얼을 Plane에 먼저 적용해준다.

image

다음으로 BP_Obstacle의 Mesh에 머터리얼을 적용해준다.

image

이제 콜리전을 설정해주어야 한다.
박스 크기에 맞게 ‘셰이프 - 박스 크기’를 조절해준다.

👉🏻 콜리전 설정

image

유니티에서는 Layer를 추가하고 오브젝트에 적용해줌으로써,
해당 물체가 장애물이라는 것을 설정해준다.

하지만 언리얼에서는 콜리전의 Object Channels 혹은 Trace Channels를 통해 구현한다.
이를 위해 아래의 과정을 따라야 한다.

image

‘프로젝트 세팅 - 엔진 - 콜리전’에 들어가 새 트레이스 채널을 추가해준다.
이름은 Unwalkable, 기본 반응은 Ignore로 설정해준다.

image

다시 BP_Obstacle로 돌아가 콜리전 프리셋을 Custom으로 둔다.
그리고 Unwalkable의 반응을 오버랩으로 설정해준다.

image

설정되었으면, BP_Obstacle을 화면 상으로 끌어, 사진과 같이 배치해준다.

글이 너무 길어졌으므로, 다음 파트에서 본격적으로 기능을 구현하겠다.

Techniques 카테고리 내 다른 글 보러가기

댓글남기기