Unreal Engine Blueprint #2

_ dfdeer·2025년 5월 1일
post-thumbnail

4. 캐릭터 블루프린트 생성 및 이동 설정

개념 알기

블루프린트(Blueprint)

언리얼 엔진의 비주얼 스크립팅 시스템으로, 코드 없이 로직을 구성할 수 있다.

인풋 매핑(Input mapping)

키보드/마우스/패드 등의 입력을 게임 내부로 연결하는 시스템이다.

Character Movement Component

언리얼의 기본 캐릭터 클래스에는 움직임을 제어하는 컴포넌트가 기본 탑재됨
이동 속도, 점프 높이, 중력 설정 등 다양한 조절이 가능함

스프링 암(Spring Arm) + 카메라(Camera)

스프링 암은 카메라와 캐릭터 간 거리를 부드럽게 유지시켜준다.
카메라가 캐릭터를 따라다니며 회전하게 만들 수 있음

구현해보기

1. 3인칭 템플릿으로 새 프로젝트 생성

게임 탭에서 3인칭 템플릿을 선택하고 Starter Content 체크박스를 활성화 시켜준 뒤 새로운 프로젝트를 생성한다.

2. 캐릭터 블루프린트 생성 및 연결

Content Browser 에서 Content 폴더에 MyCharacter 라는 폴더를 하나 만들어줬다.

MyCharacter 폴더 안을 우클릭하여 Blueprint Class 를 Character 타입으로 하나 생성해준다.
이름은 BP_Character 로 바꾸어주었다.

좌측 상단 Edit > Project Settings 를 눌러준다.

Project > Maps & Modes > Default Pawn Class 를 아까 만든 MyCharacter 로 바꿔준다.

3. 캐릭터 이동 및 카메라 회전 구현

먼저 BP_Character 블루프린트를 켜주면 이런 창이 뜬다.

왼쪽에 있는 Components 패널에서 내 캐릭터인 BP_Character 를 선택해주고

오른쪽에 있는 Detail 패털에서 Mesh > Skeletal Mesh Asset 을 SKM_Quinn_Simple 로 설정해줬다.

메시가 추가되었지만 메시와 캡슐 컴포넌트의 위치와 방향이 맞지 않아 조정을 해주었다.

스프링 암과 카메라도 컴포넌트에 추가시키고 적당한 위치로 배치를 시켰다.

캐릭터와 카메라의 거리는 Detail 패널에서 Camera > Target Aim Length 에서 조절할 수 있다.

이제 입력을 받으면 캐릭터가 움직이게 하기 위한 설정을 위해 Inputs 라는 폴더를 만들고

그 폴더 안에 우클릭하여 Input > Input Mapping Context 를 하나, Input Action 을 두 개 생성해준다.

Input Action 은 각각 IA_Look, IA_Move 로 시야와 이동에 관한 액션을 다루고,
Input Mapping Context 는 IMC_DefaultMappingContext로 각 액션에 대한 내용을 매핑하여 관리한다.

그리고 우리는 공부가 목적이니 Content > ThirdPerson > Input > Actions 에 있는 IA 파일들을 모두 삭제한다.

우선 IA_Move 에 들어가면 이런 창이 뜨는데,

Action > Value Type 을 Axis2D (Vector2D) 로 바꾸어준다.
우리는 X와 Y, 즉 2차원에서만 이동을 하고 점프는 따로 구현을 할 예정이기 때문에 2차원 벡터로 진행한다.

IA_Look 도 다를 거 없이 똑같이 변경시켜주면 된다.

IA_Move 와 IA_Look 의 설정을 마치고 저장을 해 준 뒤, IMC 로 넘어오면 이러한 창이 뜬다.

Detail 패널에서 Mappings > Mappings 에 + 버튼을 눌러 새로운 매핑을 2개 추가해주고 각각 IA_Move, IA_Look 과 연동을 시켜줬다.

우리는 키보드의 W/A/S/D로 움직이게 만들 예정이기 때문에 이렇게 설정해주었다.

추가로 필요한 요소가 있는 버튼들은 Modifiers 에서 + 버튼을 눌러 Array elelement 를 추가하여 선택해주면 된다.

버튼WASD
방향전방좌측후방우측
X축Y축 반전X축 반전Y축
추가 요소Swizzle Input Axis Values, NegateNegateSwizzle Input Axis Values

설정은 이런 식으로 하면 된다.

아까 하나 더 만들어둔 매핑에는 IA_Look을 연동시키고 Mouse XY 2D-Axis 를 선택해주고,
Modifiers 에서 Negate 로 Y축만 반전을 시켜준다.
(우리가 흔히 쓰는 마우스를 위로 올리면 화면이 위로, 아래로 내리면 화면이 아래로 가게 하는 설정)

이제 설정한 매핑을 캐릭터에 적용시키기 위해서 블루프린트를 써야하기 때문에, BP_Character의 EventGraph로 넘어왔다.
Event BeginPlay를 제외한 노드는 당장 필요해 보이지 않기에 지워주었다.

우선 빈 곳에 우클릭하여 Get Player Controller 노드를 생성한다.

그리고 Return Value 에서 핀을 끌어와 Enhanced Input Local Player Subsystem 노드를 생성하며 연결해준다.

또 저 노드에서 핀을 끌어와 Add Mapping Context 노드를 생성하며 연결해주고 Event BeginPlay 와도 연결시켜준다.

Add Mapping Context 의 Mapping Context 는 아까 설정을 마친 IMC 를 선택해준다.

이제 어떤 키를 입력했을 때 캐릭터가 무슨 행동을 할 지를 설정했다.
하지만 아직 캐릭터에게 명령을 내리는 코드를 짜지 않았기에 할 일이 남았다.

다시 빈 곳에 우클릭 하여 IA_Move 를 가져온다

Action Value 를 우클릭하고 Split Struct Pin 을 눌러 구조체 분할을 해준다.

그리고 Add Movement Input 노드를 2개 만들어 IA_Move 와 연결을 해주고, Action Value 의 X와 Y를 각각 하나씩 Scale Value 핀에 연결시켜준다.

Movemnet Input 의 방향을 설정하기 위해 Get Forward/Right Vector 노드를 만들어주고,

Foward는 <전방/후방> 을 맡는 X가 연결된 노드,
Right는 <좌측/우측> 을 맡는 Y가 연결된 노드의 World Direction 핀에 연결한다.

하지만 이대로라면 A/D를 누를때 플레이어의 시야 기준이 아닌, 캐릭터의 기준 오른쪽/왼쪽으로 움직이기 때문에 계속해서 같은 방향으로 빙빙 돌 것이다.

그러므로 빈 곳에 Get Control Rotation 노드를 생성한 뒤, 구조체 분할을 시켜주고

Forward/Right Vector 의 앞쪽 핀도 모두 구조체 분할을 시켜준다.

그런 뒤에 Control Rotation 의 Retrun Value Z (Yaw) 핀을 Foward/Right Vector 의 In Rot Z (Yaw) 핀에 연결 시켜준다.

IA_Look 도 똑같은 방식으로 노드를 생성하고 Action Value 를 구조체 분할을 한 뒤,
Add Controller Yaw Input, Add Controller Pitch Input 에 X와 Y를 각각 연결해준다.

캐릭터와 카메라의 회전을 위해 BP_Character 의 디테일 패널에서
Pawn > Use Controller Rotataion Pitch/Yaw/Roll 을 모두 체크 해제를 해준다.

그리고 SpringArm 컴포넌트의 Detail 패널에서
Camera Settings > Use Pawn Control Rotation 과 Inherit Pitch/Yaw/Roll 을 모두 체크해준다.

마지막으로 Character Movement 컴포넌트의 Detail 패널에서
Character Movement (Rotation Settings) > Orient Rotation to Movement 를 체크해준다.

모든 설정이 끝났으니 저장을 하고 컴파일을 해준다.

이제 캐릭터 블루프린트를 끌어다가 맵에 배치해주고,

Detail 패널에서 Pawn > Auto Possess Player 를 Player 0 으로 설정해준다.

4. 테스트 플레이

https://drive.google.com/file/d/19KFmK44ctrx-wySccRxmkR6qHTdBH5Wa/view?usp=sharing

애니메이션이 없어서 부자연스럽긴하지만 잘 움직이는 모습이다.

학습 내용 요약 & 느낀점

드디어 언리얼 엔진의 블루프린트에 입문을 하고 사용자의 입력을 받는 시스템을 이용하는 작업을 해봤다.
내가 캐릭터를 이동시키기 위해 WASD 키를 누르면 움직이는 모습이 신기했다.

작업을 하는 도중에 어렵고 막히는 부분이 많았지만 그럴 때마다 강의를 보고 이해하며 작업을 이어나갈 수 있었다.
이동을 구현했다 싶으면 생각지도 못한 방향으로 움직이거나, 화면을 돌리는 데 원하는 방향이 아닌 반대로 돌아가는 등 문제를 겪을 때 마다 도움이 되었다.

사실 원래는 점프까지 넣고 싶었지만, 생각보다 이동을 구현하는데에 오래 걸려서 내일 도전하기로 했다.

비록 3D 모델을 직접 만들어서 쓰거나 애니메이션을 넣은 건 아니지만, 언리얼 엔진을 이렇게 이용했다는 점에 의의를 두기로 했다.
당장은 아니지만 이렇게 공부하며 작업을 진행하다 보면 정말 자연스러운 게임을 만들 수 있겠다는 생각이 들었다.

0개의 댓글