[Day 11] 플레이어 캐릭터와 나만의 레벨 디자인 만들기

하돌·2024년 12월 19일
0
post-thumbnail

목차

  • 레벨디자인

  • 프로젝트 셋업 시 주의할 점

  • 캐릭터 블루프린트 만들기

    • 캐릭터 시점 만들기
    • 캐릭터 움직임 만들기

시작하기전..
깨닫게 된 점을 정리하려면 독백하는 식으로 작성하는 게 나을거 같아
이제는 독백하는 식으로 글을 작성하려고 합니다.


레벨 디자인

게임 내에서 플레이어가 경험할 수 있는 환경과 구조를 만드는 과정이다.


프로젝트 셋업 시 주의할 점

이렇게 프로젝트를 생성하려 하면 엔진 버전이 현재 설치된 5.4 버전과 맞지 않다.
하지만 일단 생성한다.

이름은 꼭 "Second Project"가 아니라 다른 걸로 정하고 Online Learning Kit의 프로젝트를 생성하셔도 상관없다.

처음할 때는 Second Project를 엔진 실행하면 나오는 기본 프로젝트로 만들고
Loer Sector Building Kit라는 에셋 팩을 그 프로젝트에 추가하려는 큰 실수를 했다.
Online Learning Kit의 기본 에셋이 담긴 프로젝트에 에셋 팩을 추가하려면
Online Learning Kit로 만들고 이름을 'Second Project'라고 지정할 수 있는거 였다.

이제 버전이 맞지 않다는 걸 해결해야 한다. 실행 파일의 버전을 바꿔야 한다.
그 경로를 파일탐색기에서 직접 찾아도 되지만
그냥 에픽게임즈 런처에서 해당 프로젝트 우클릭을 누르면 '폴더 보기'가 나온다.

거기서 프로젝트 실행 파일을 찾아 우클릭 후 'Switch Unreal Engine version..으로 바꾼 후 원하는 엔진 버전을 선택하면 된다.


캐릭터 블루프린트 만들기

플레이어 캐릭터는 게임에서 사용자가 조종하는 핵심 오브젝트다.

캐릭터의 외형, 시점, 이동 및 점프와 같은 기본적인 동작을
코드 작성 없이 블루프린트로 만들 수 있다.

그러니 블루프린트로 게임을 만들거라면 꼭 익혀야 한다!

콘텐츠 드로어에서 우클릭을 하면 이런 창이 뜬다.

여기서 캐릭터를 눌러주면

캐릭터의 블루프린트 클래스가 만들어진다.(NewBlueprint)

이제 NewBlueprint를 옆에 BP_NBC_Character처럼 만들면 된다.

새로 만든 그 블루프린트 클래스를 클릭하면 이런 화면이 나온다.
뷰포트에 캡슐 모양의 무언가와 파란색 화살표가 보였다.
그 화면의 디테일 창에서 메시 속성을 찾고 미리 다운해둔 캐릭터 메시를 찾아 스켈레탈 메시 에셋에 넣었다.

그러면 왜인지는 모르겠지만 캡슐 컴포넌트가 캐릭터랑 딱 맞지 않고 땅에 박혀 있다.
그래서 컴포넌트 창에서 메시를 더블 클릭하고 위치를 캡슐에 맞게 조정했고
방향도 저 파란 화살표 방향을 보도록 맞춰줘야 한다.

Why? 아직 모르겠다..(나중에 정리)
그리고 캡슐은 위치가 고정이어서 높이나 너비만 디테일 창에서 조정 가능하다.


캐릭터 시점 만들기

컴포넌트 창

위쪽이 씬 컴포넌트, 아래쪽이 논 씬 컴포넌트다. 가장 큰 차이점은 트랜스폼이라 생각한다.

월드에서 위치가 필요한 경우 → 씬 컴포넌트 사용.
위치가 필요 없고 논리적 작업을 처리할 때 → 논 씬 컴포넌트 사용.


스프링 암(Spring Arm) 추가

시점을 만들기 위해 쓰는 것으로 카메라가 캐릭터의 위치를 계속 따라가게 한다.
자손을 부모에서 고정된 위치에 있게 하려는 특성이 있어
카메라를 스프링 암의 자손으로 하면 카메라가 계속 부모인 스프링 암을 따라가게 할 수 있다.

카메라가 없으면 이렇게 캐릭터에 시점이 딱 붙어버린다.
그리고 스프링 암이 있어야 카메라와 캐릭터 사이에 물체가 있어 시야를 가릴 때
카메라가 그 물체를 통과하고 딱 캐릭터가 보이는 부분까지 카메라를 당겨 온다.
이런식으로..


카메라 컴포넌트 추가

왜인지 모르겠지만 '카메라'로 검색하면 카메라 컴포넌트를 골라도 시네 카메라 컴포넌트가 골라졌다. 웬만하면 영어로 검색해야지 오류가 안 나는 거 같다.
이렇게 스프링 암을 돌려서 각도를 바꿀 수도 있다. 안될 때가 있는데 언리얼을 껏다 켜보자
카메라가 고정되어 있는데 여기 체크를 해주면 마우스를 돌렸을 때 원하는 대로 시점을 볼 수 있다.


캐릭터 움직임 만들기

캐릭터의 움직임을 만드려면 Look과 Move가 필요하다. 시점과 이동.. 그리고 Jump도 넣었다.
이것들을 'MappingContext'에 넣어서 플레이어에게 입력값을 받으면 액션이 작동되도록 할 수 있다.
IA(Input Action)는 입력 받으면 어떤 동작을 할 건지 설정
IMC(Input Mapping Context)는 어떤 입력을 받았을 때 어떻게 동작할 건지 설정
ㄴ IA를 IMC에 모아서 편하게 관리할 수 있다!
컨텐츠 드로어에서 우클릭하면 둘 다 여기서 만들 수 있다!


입력 액션 설정

입력 액션 창에 들어오면 디테일 창이 나온다. 여기서 Look과 Move 모두 X,Y 축을 사용하니
값 타입을 Axis2D (Vector2D)로 설정하고 입력 매핑 컨텍스트로 갔다.


입력 매핑 컨텍스트 설정

매핑 옆에 +를 눌러 만든 입력 액션을 각각 추가해준다. 나는 IA_NBC_Move와 IA_NBC_Look를 만들었기 때문에 저 사진에 있는 걸 고르면 안 되고 검색으로 찾아 써야한다.
IA_NBC_Move에는 4개의 컨트롤 바인딩 W,A,S,D를 추가했다.
이때 모디파이어도 설정한다.
움직임은 X축을 기준으로 정면을 향한다.

W는 X축 방향인 앞으로 갈거니까 설정 X

S는 X축 역방향인 뒤로 갈거니까 부정으로 설정

스위즐 입력 축 값은 Y축에 매핑하기 좋다고 한다. 그래서 A,D에 둘 다 설정

D는 Y축의 정면인 오른쪽으로 갈거니까 설정 X

A는 Y축의 역방향인 왼쪽으로 갈거니까 부정으로 설정
Look은 마우스에 따른 카메라 시점을 결정할 것이기 때문에 마우스 XY 2D 축으로 설정
여기서 X,Y만 쓰이며 X는 왼쪽, 오른쪽 Y는 위,아래 시점을 정한다.

None 상태에서 마우스를
왼쪽으로 움직이면 오른쪽으로
오른쪽으로 움직이면 왼쪽으로
위로 움직이면 위로
아래로 움직이면 아래로 시점이 회전했다.

여기서 위,아래만 반대로 적용하고 싶으니 부정을 택하고
Y만 체크했다. 체크한 값만 부정이 적용된다.

Jump는 당연히 스페이스바로 설정 후 끝!


캐릭터 블루프린트 이벤트그래프 설정

이제 블루프린트의 이벤트그래프를 설정해야 한다.
Get Player Controller는 플레이어가 빙의한 폰의 정보를 가져온다.
지금은 잘 모르겠지만 캐릭터에게 입력 액션을 적용하려면 Enhanced Input Local Player Subsystem을 써야한다. 그래서 입력 액션을 받아들이는 캐릭터 정보를
Add Mapping Context의 Target으로 지정하고
Mapping Context는 내가 만들어 놓은 것을 찾아 설정했다.

EnhancedInputAction들은 각각의 입력 액션의 이름을 블루프린트에서 검색하면 쉽게 끌어온다. 그리고 Action Value를 저렇게 늘리려면 우클릭 후 '구조체 핀 분할'을 누르자.
Get Actor Forward Vector - 현재 액터의 앞 방향 벡터값을 구함
Get Actor Right Vector - 현재 액터의 오른쪽 방향 벡터값을 구함

그렇게 각각 구한 X와 Y축의 값을 Movement Input의 Scale Value로 넣으면
캐릭터가 움직인다! 하지만 뭔가 이상하게 움직인다..

X축 움직임은 Add Controller Yaw Input, Y축 움직임은 Add Controller Pitch Input에 연결했다.
컨트롤러가 카메라를 제어한다. 그래서 컨트롤러의 회전 방향에 그만큼 값을 주면 캐릭터가 보는 화면이 회전하게 되는 것이다!

자 X축이 앞, 뒤 | Y축이 좌, 우 | Z축이 위, 아래를 나타낸다.


Pitch, Yaw, Roll 에 대한 이해

Pitch Y축을 기준으로 회전한다.
Yaw는 Z축을 기준으로 회전한다.
Roll은 X축을 기준으로 회전한다.

이렇게 왼손 기준 엄지-Z, 검지-X, 중지-Y로 생각하며 외웠다.
회전하는 물체가 공이라고 생각하면 쉽다.
Y축 기준으로 회전하는 Pitch가 앞, 뒤로 회전하며 앞이나 뒤로 굴러감
(캐릭터로 치면 위, 아래 바라볼 수 있음)

Z축 기준으로 회전하는 Yaw가 가만히 팽이 돌듯이 회전
(캐릭터로 치면 좌, 우 바라볼 수 있음)

X축 기준으로 회전하는 Roll이 옆으로 회전하며 좌나 우방향으로 굴러감.

여기서 X는 수평, Y는 수직을 의미한다. 2개 밖에 없으니까..
X에 좌, 우 바라보도록 Yaw Input을 연결,
Y에 위, 아래 바라보도록 Pitch Input을 연결한 이유를 여기서 알 수 있다.

캐릭터의 디테일 창에서 컨트롤러 회전을 원하는 것에 체크하면 회전이 된다.

Move에다가 Get Control Rotation을 추가하고 Get Vector 노드들의 target 부분을 구조체 핀 분할로 나눠서 회전값을 받게 해주었다.
Jump의 값 타입은 따로 건드리지 않았는데 기본 Digital(bool) 값으로 했다. 왜냐면 이미 만들어진 함수를 사용할 것이기 때문에 입력이 true인가 false인가만 따지면 되기 때문이다.
캐릭터의 디테일 창에서 점프라고 검색하면 관련 설정들이 나오는데 점프 Z 속도를 바꾸면 점프 높이를 조절할 수 있다.

마찬가지로 떨어지는 속도는 중력 스케일 값을 조정하면 낙하 속도를 조절할 수 있다.

profile
게임 개발자로서 배운 것을 정리한 블로그입니다. 벨로그 서버가 불안정한 거 같아서 티스토리로 옮겼습니다.

0개의 댓글