2026. 4. 14. 15:28ㆍUnreal
Pawn VS Character?
언리얼에서 플레이어가 조종할 수 있는 오브젝트의 기본 단위는 "Pawn"이다.
그리고 Character 클래스는 Pawn을 상속받은 자식 클래스이다.
그럼 뭘 써야할까?
두 클래스의 차이를 알아보자.
| Pawn | Character | |
| 이동 / 중력 / 점프 | 직접 구현해야 함 | 기본 내장 |
| 충돌 처리 | 직접 구현 | CapsuleComponent 기본 제공 |
| 적합한 경우 | 비행기, 드론, 카메라 등 자유로운 이동 | 사람형 캐릭터 |
사람처럼 두 발로 걷고 달리고 점프하는 캐릭터라면 Character를 쓰는게 훨씬 편리하고, 완전히 다른 이동 방식이 필요하다면 Pawn을 직접 구현해서 확장하는 것이 좋다.
Character 클래스 구성 요소
Character 클래스를 블루프린트로 열면 다음과 같은 항목이 기본으로 들어있다.

CapsuleComponent (루트)
캐릭터의 충돌 범위를 정의하는 캡슐 형태의 콜리전이다.
Radius와 HalfHeight로 물리적 크기를 조절한다.
SkeletalMesh Component
캐릭터의 3D모델과 애니메이션을 담당한다.
CharacterMovementComponent
이동, 점프, 중력, 네트워크 동기화를 모두 처리하는 핵심 컴포넌트이다.
이게 있어서 Character를 쓰면 몇 줄만 구현해도 이동을 구현할 수 있다.
카메라 설정 - SpringArm + Camera
3인칭 시점을 위해서 두 가지의 컴포넌트를 추가한다.

미리 카메라 컴포넌트와 스프링 암 컴포넌트를 전방선언했다.

MyCharacter.cpp

핵심 포인트는 SpringArm이 마우스 입력을 받아 회전하고, Camera는 "그 끝"에 붙어서 따라간다.
카메라 자체에는 bUsePawnControlRotation = false로 해야 이중 회전이 생기지 않는다.
PlayerController - 입력의 시작점
언리얼의 입력 처리는 다음과 같다.
플레이어 입력 >> PlayerController >> Pawn에게 명령
PlayController가 입력을 받아서 해석하고, 현재 조종 중인 Pawn에게 동작을 명령한다.
입력 로직과 캐릭터 동작 로직이 분리되어 있어 코드 관리가 훨씬 깔끔해진다.

기본적으로 캐릭터의 이동, 점프, 카메라 회전, 달리기를 구현하고자 할 때의 헤더파일의 모습이다.
GameMode에 캐릭터 등록
만든 캐릭터를 게임 시작 시 자동으로 스폰하려면 GameMode에 등록해야 한다.

게임이 시작되면 Player Start 액터 위치에 DefaultPawnClass가 자동으로 스폰되고, PlayerControllerClass가 그 Pawn에 빙의(Posses)하여 입력을 처리한다.
Enhanced Input System
언리얼 5에서는 기존 입력 방식 대신 Enhanced Input을 사용한다.
이는 두 가지 개념으로 나뉜다
Input Action ( IA ) - 동작 단위 정의
하나의 동작을 추상화한 파일이다.
IA_Move, IA_Look, IA_Jump, IA_Sprint 이런식으로 파일의 이름을 정의한다.
Input Mapping Context (IMC) - 키 매핑 묶음
여러 IA를 한데 모아 실제 키를 연결하는 파일이다.
IMC_Character에 위 IA들을 넣고 각각 키를 지정한다.
점프

점프는 스페이스바를 눌렀을 때 on / off 형태로 동작한다.
별도의 트리거나 모디파이어는 필요 없으므로 기본 값으로 저장한다.
Look

마우스 움직임을 통해 Yaw(반전)과 Pitch(상하 회전)값을 동시에 전달 받는다.
Axis로 지정한 X축, Y축 값을 게임 내 좌표계에 맞춰 회전에 반영한다.
기본적으로 마우스 Y축의 움직임은 "위로 움직임 = 양수", "아래로 움직임 = 음수"로 전달된다.
카메라의 상하 회전은 엔진의 좌표계에서 "위로 = 음수", "아래로 = 양수"로 작동하는 경우가 많아 Y축 값을 회전해야 일반적으로 마우스를 회전해서 카메라를 돌리는 게임에서 사용하는 사용감을 느낄 수 있다
Move

여기서 Swizzle Input Axis Values는?
입력 축(Axis)을 변환하거나 재구성하는 기능이다. 언리얼 엔진의 입력 시스템에서는 입력 데이터를 X, Y, Z축 중 하나로 매핑한다. Swizzle은 이 입력 값이 올바른 축에 맞지 않을 경우, 특정 축으로 재배치하거나 변환할 수 있게 도와준다.
Sprint

스프린트는 왼쪽 Shift키를 눌렀을 때 on/off 형태로 동작한다.
트리거나 모디파이어는 기본 상태로 둔다.
IMC 활성화
이제 만든 IMC를 실제로 동작시키려면 PlayerController의 BeginPlay()에서 활성화 시켜야 한다.

LocalPlayer >> Subsystem >> AddMappingContext 순서로 IMC를 등록한다.
이렇게 하면 게임 중에도 RemoveMappingContext로 입력 모드를 동적으로 바꿀 수 있다.
예를 들어 인벤토리를 열 때 이동 입력을 끄고 UI 입력으로 전환하는 것도 가능하다.
AddMappingContext에서 숫자 0은 가장 높은 우선순위를 가진다는 인덱스 0의 의미이다.
'Unreal' 카테고리의 다른 글
| 리플렉션 / UBT / UHT / CDO 정리 (0) | 2026.04.15 |
|---|---|
| < 언리얼 C++ > 캐릭터 이동 구현 (0) | 2026.04.14 |
| 언리얼 DAY9 언리얼 블루프린트 정리 (0) | 2026.03.03 |
| 내일배움캠프 Day 6 플랫폼 게임 만들기 (0) | 2026.03.01 |
| 내일배움캠프 DAY5 블렌더 스페이스와 움직이는 액터 (0) | 2026.02.27 |