[Sebastian Lague] A* Pathfinding (E02: node grid) Part 1
카테고리: Techniques
이 포스팅은 Sebastian Lague의 A* Pathfinding 영상을 기반으로 진행됩니다.
깃허브 주소: Sebistian Lague’s Github
✔️ 프로젝트 세팅
먼저 Unreal Engine을 켜고 사진과 같이 세팅해준다.
- 기본
- C++
- 시작 콘텐츠 체크 해제
여기서, 경로에 한글이 들어가지 않도록 주의한다.
프로젝트가 생성이 되면, 콘텐츠에 들어가 Blueprints, Maps, Materials 폴더를 추가해준다.
Maps 폴더 내에 ‘Pathfinding’이란 이름의 Level을 추가해준다.
Level이란, 유니티에서의 Scene과 같은 역할을 한다.
만든 Level을 클릭하면 전혀 보이는 것이 없는데, 이는 빛을 추가해주지 않았기 때문이다.
정육면체에 +가 붙은 아이콘을 클릭하여 ‘DirectionalLight, ExponentialHeightFog, SkyAtmosphere’를 추가해준다.
그리고 Plane 또한 추가하여 바닥을 생성해준다.
생성한 Plane의 스케일을 적당히 조절하여 땅을 넓혀준다.
이제 생성한 레벨을 메인으로 둬야한다.
그러기 위해 상단의 ‘편집 탭 - 프로젝트 세팅’ 으로 들어가준다.
‘맵 & 모드’의 에디터 시작 맵과 게임 기본 맵을 방금 만들어주었던 Pathfinding 레벨로 설정한다. 여기까지 해주었으면 기본적인 세팅은 마무리되었다.
📦 배치
👉🏻 클래스 생성
이제 본격적으로 시작할수 있다.
엔진 - 엔진 C++ 클래스 폴더에 들어가, 빈공간을 우클릭하고 새 C++ 클래스를 생성한다.
번거롭지만, 처음에는 C++ 클래스 폴더가 따로 없으므로, 사진과 같은 방법으로 클래스를 생성해주어야 한다.
부모 클래스를 액터로 선택한다.
Obstacle 이란 이름의 액터 클래스를 생성한다.
그러면 이제서야 C++ 클래스 폴더가 보이기 시작한다.
이제부턴 이 폴더에서 클래스를 편하게 생성할 수 있다.
이전과 같이 부모 클래스가 액터인 Grid 클래스를 새로 생성해준다.
Grid와 Obstacle 모두 블루프린트 클래스로 생성해주어야 한다.
아까 만들었던 Bluprints 폴더를 선택하고 이름 앞에 ‘BP_‘를 붙여준다.
위와 같은 방법으로 두개의 블루프린트 클래스를 생성해주었다.
Obstacle C++ 클래스를 클릭하여 Visual Studio를 켜주고 Obstacle.h에 들어가준다.
UStaticMeshComponent와 UBoxComponent를 추가한다.
액터에는 UBoxComponent가 포함되어있지 않으므로,
앞에 class를 붙여 선언해준뒤, cpp에서 #include 해주어야 한다.
Obstacle.cpp에 들어가 #include “Components/BoxComponents.h” 를 추가한다.
CreateDefaultSubobject를 통해 각 변수에 컴포넌트들을 넣어준다.
BoxCollision을 루트로 두고, Mesh를 루트의 자식으로 넣어준다.
언리얼로 돌아와, LiveCoding.Compile을 통해 컴파일을 진행한다.
아까 만들어주었던 BP_Obstacle로 들어가 풀 블루프린트 에디터를 열어준다.
스태틱 메시로는 Cube를 검색하여 넣어준다.
하지만 색깔이 너무 밋밋하고 구분이 가지 않는다.
👉🏻 머터리얼
색깔을 넣어주기 위해 Meterials 폴더 내에 머터리얼을 만들어준다.
앞에 ‘M_‘을 붙여 생성해주는 것이 일반적이다.
머터리얼에 들어가 격자 화면을 우클릭하고 vectorParameter를 추가해준다.
원하는 색을 넣어준다.
이와 같은 방법으로 M_Grass와 M_Obstacle을 생성해주었다.
생성한 머터리얼을 Plane에 먼저 적용해준다.
다음으로 BP_Obstacle의 Mesh에 머터리얼을 적용해준다.
이제 콜리전을 설정해주어야 한다.
박스 크기에 맞게 ‘셰이프 - 박스 크기’를 조절해준다.
👉🏻 콜리전 설정
유니티에서는 Layer를 추가하고 오브젝트에 적용해줌으로써,
해당 물체가 장애물이라는 것을 설정해준다.
하지만 언리얼에서는 콜리전의 Object Channels 혹은 Trace Channels를 통해 구현한다.
이를 위해 아래의 과정을 따라야 한다.
‘프로젝트 세팅 - 엔진 - 콜리전’에 들어가 새 트레이스 채널을 추가해준다.
이름은 Unwalkable, 기본 반응은 Ignore로 설정해준다.
다시 BP_Obstacle로 돌아가 콜리전 프리셋을 Custom으로 둔다.
그리고 Unwalkable의 반응을 오버랩으로 설정해준다.
설정되었으면, BP_Obstacle을 화면 상으로 끌어, 사진과 같이 배치해준다.
글이 너무 길어졌으므로, 다음 파트에서 본격적으로 기능을 구현하겠다.
댓글남기기