언리얼 5에서 플레이어 이동을 구현합니다.

언리얼 5에서 새 신을 만들고 Enhanced Input으로 이동, 시야, 점프, 달리기를 구현합니다.
블루프린트 흐름도와 C++ 라인 - 바이 - 라인 해설로 초보자도 바로 따라 할 수 있습니다.
빈 신을 만들고, 입력 액션/매핑을 준비한 뒤, 블루프린트 기준으로 이동 로직을 완성하는 전체 흐름입니다.
블루프린트로 신을 만들고 무슨 일을 하는지를 간단한 말로 풀어 이해부터 수정, 응용까지 바로 알아보겠습니다.
이번 글에서는 블루 프린트 기준으로 신을 만들기 때문에 하단의 과정을 하지 않아도 작동은 할 수 있습니다.
하지만 어떻게 추가하는지에 대한 방법을 간단하게 알아보는 내용입니다.
프로젝트 만들기
새 프로젝트 생성하기
- 언리얼 5 실행 > Games > ThirdPerson을 선택하고 프로젝트 명을 입력해 주세요
- 프로젝트 이름을 입력했다면 Create를 클릭해서 생성해 주세요

플러그인, 프로젝트 세팅
- 화면 좌측 상단 메뉴에서 Edit을 선택해 주세요
- Edit - Plugins - Enhanced Input을 활성화해 주세요
- Edit - Project Settings를 열어주세요
- Project 항목 아래 "Maps & Modes"를 클릭해 주세요 그다음 제일 아래 있는 이미지와 같이 설정해 주세요



새 레벨 씬 만들고 저장
- 일단 아무것도 없는 새 레벨 신을 만들어 보도록 하겠습니다.
- File - New Level - Basic을 클릭해서 바닥만 있는 빈 신을 생성해 주세요
- 그리고 뷰포트에서 Player Start가 있는지 확인해 주세요
Enhanced Input 구현
입력 자산 만들기
IA_Move
- Content/Input 우클릭 후 Input 액션을 선택해 주세요
- 그리고 이름에 IA_Move로 설정하고 더블 클릭해서 열어주세요
- Axis2D를 생선 한 이유는 W/S는 앞뒤(X축), A/D는 좌우(Y축), 나중에 패드 스틱도 같은 축으로 들어오기 때문에 공용 처리 가능


IA_Look
- Value Type을 Axis2D로 위와 동일하게 설정해 주십니다.
- 마우스 X/Y, 패드 오른쪽 스틱 X/Y를 한 번에 처리하기 위함입니다.

IA_Jump
- Value Type을 Bool로 설정해 주세요
- 눌렀을 때 땄을때 두 상태만 필요하기 때문에 (Started/Completed) 이벤트 분리하기 용이합니다.

IA_Sprint
- Value Type = Bool로 설정해 주세요
- Shift를 누르는 동안 유지(또는 토글) 같은 논리를 깨끗하게 다루기 위해서입니다.
Input Mapping Context(IMC) 만들기
Content Browser > Input > Input Mapping Context를 클릭한 다음 이름을 추가해 주세요
- 방향키 추가는 생성한 IMC_Player를 더블클릭한 후 Mappings 리스트에서 IA_Move를 추가합니다.
- 그리고 키보드 모양을 클릭한 후 방향키를 눌러 할당해 주세요
- IA_Look도 같은 방식으로 추가해 줍니다.
- 그리고 잘 되는지 체크를 해주기 위해서 Add Mapping Context(IMC_Player, 0)이 붙어있는지 확인해 줍니다.
- Play후 방향키를 눌러 이동과 회전이 되는지 확인합니다.


그럼 혹시나 짚고 넘어가야 하는 것이 있는지 조금 더 알아보도록 하겠습니다.
- 왜 카메라(컨트롤러) 회전을 기준으로 이동할까요?
- 카메라가 보는 방향 = 플레이어가 기대하는 전진 방향입니다.
- 컨트롤러 회전에서 Pitch/Roll을 제거해 수평 기준을 만들면 지면 경사에서도 방향 감각이 안정적입니다.
- Forward/Right 벡터를 여기서 구하면 W는 항상 "보는 쪽 전진", D는 "오른쪽"으로 일관되게 동작합니다.
- 이 방식은 1인칭/3인칭 모두에서 직관적입니다.
- 반대로 Pawn의 로컬 회전만 쓰면 카메라와 분리되어 조작감이 어색해질 수 있습니다. 따라서 컨트롤러 회전 기반이 권장됩니다.
- Axis2D를 쓰면 어떤 장점이 있을까요?
- 앞뒤(X)와 좌우(Y)를 한 번에 다룹니다.
- 키보드(WASD)와 패드 스틱(아날로그)을 동일한 액션으로 처리해 코드/그래프가 단순해집니다.
- 나중에 수영, 비행 등 방향 입력이 더 복잡해질 때도 구조를 그대로 확장할 수 있습니다.
- 리바인드 UI에서도 한 액션으로 관리하니 유지 보수가 용이합니다.
- IMC 우선순위는 어떻게 정할까요?
- 기본 게임플레이 IMC는 0, UI나 컸신 처럼 더 우선해야 하는 콘텍스트는 높은 수(예: 1~2)로 둡니다.
- UI가 열리면 UI IMC Add(High), 닫으면 Remove로 복귀합니다. 이렇게 하면 입력 충돌을 예방하고 상태 전환이 명확해집니다.
- 달리기를 속도 변경으로 처리하는 이유는 뭘까요?
- CharacterMovement 내부가 속도 기반으로 설계되어 있어서, MaxWalkSpeed만 바꿔도 가속/감속/애님이 자연스럽게 따라옵니다.
- 힘을 따로 가하지 않아도 되므로 버그가 줄고 네트워크 동기화도 간단합니다.
- 마우스 감도는 어디에 둘까요?
- LookSensitivity 변수를 만들어 AddControllerYaw/PitchInput에 곱합니다.
- ㅔ이터 에셋 옵션 메뉴로 노출하면 디자이너, 플레이어가 조정 가능해집니다.
- 줌(ADS) 상태에서는 감도를 동적으로 낮추면 멀미와 조준 난이도를 줄일 수 있습니다.
- 점프 중복 입력을 막으려면 어떻게 해야 할까요?
- Started에서만 점프를 승인하고, 공중에서는 CanJump() 체크로 제한합니다.
- 더블 점프는 점프 횟수 변수를 두고 착지 시 초기화합니다.
- Completed에서 StopJumping() 처리로 입력 잔상도 제거합니다.
- 패드(스틱) 입력은 어떻게 추가하죠?
- IMC_Player에서 IA_Move/IA_Look에 Gamepad Left / Right Stick 축을 추가 매핑합니다.
- 데드존/감쇠는 Modifiers로 조절하세요 버튼 프롬프트 아이콘은 플랫폼 가이드에 맞춰 통일합니다.
- 모바일 가상 조이스틱 연결은 어떻게 해야 할까요?
- 프로젝트 설정에서 Virtual Joystick을 켠 뒤, 해당 축 출력을 IA_Move/IA_Look에 매핑하면 됩니다.
- 점프/달리기는 터치 버튼을 Boolean 액션에 연결합니다.
- 터치 영역과 감도는 디바이스 DPI에 맞춰 튜닝합니다.
- 레벨을 바꿨더니 입력이 안됩니다.
- 새 레벨에서도 BeginPlay에서 IMC를 Add 해야 합니다.
- GameMode / PlayerController 교체 여부, 소유자 체인 변화를 점검합니다.
- 레벨 블루프린트에 의존하기보다 캐릭터/컨트롤러 쪽에 등록 로직을 두면 안정적입니다.
- 카메라와 이동 방향이 어긋날 때 점검 포인트는요?
- 컨트롤러 회전을 사용했는지, Pitch/Roll을 0으로 만들었는지, Forward/Right를 그 회전에서 구했는지 확인합니다.
- 스프링암의 Use Pawn Control Rotation 설정도 함께 봅니다.
- 탑다운이면 Yaw만 사용합니다.
- 경사면에서 미끄러짐을 제어하려면 어떻게 해야 할까요?
- Walkable Floor Angle, Ground Friction, 표면 물리 재질을 조절합니다.
- 너무 미끄러지면 마찰을 올리고, 등반 불가 각도는 Walkable Floor Angle로 제한합니다.
- 상황별 값을 기록하며 한 변수씩 변경해 효과를 확인합니다.
- 네트워크 멀티에서 스프린트/점프 동기화는?
- 클라이언트에서 입력 > 서버 승인 구조로, 서버에서 속도 상한과 점프 가능 상태를 검증합니다.
- 상태 변수는 서버 권위로 레플리케이션합니다.
- 입력 타임스탬프와 예측/보정을 적용하면 체감 지연을 줄일 수 있습니다.
- UI 열림 시 이동을 막으려면?
- UI IMC를 우선순위로 Add 하고, 게임플레이 IMC는 그대로 두거나 Remove 합니다.
- UI 닫을 때 반대로 전환합니다.
- 상태 머신(예: EInputMode)으로 관리하면 버그가 줄어듭니다.
- 토글 스프린트로 바꾸려면?
- IA_Sprint(Started)에서 bSprint =! bSprint로 상태를 반전하고, 값에 따라 MaxWalkSpeed를 설정합니다.
- UI에 상태 표시 아이콘을 표시해 가시성을 올리는 방법도 있습니다.
- FOV, 모션 블러가 조작감에 주는 영향은요?
- FOV가 너무 좁으면 멀미 유발, 너무 넓으면 속도감 과도 같은 현상이 일어날 수 있습니다.
- 적정한 FOV 유지와 모션 블러 강도 하향이 가독성과 안정감을 줍니다.
- 러닝 시 카메라 흔들림은 약하게, 전투 시는 더 약하게 두면 피로도가 감소합니다.
- 코드에서 입력 자산을 직접 로드할 수 있나요?
- 가능하지만 일반적으로 에디터에서 UPROPERTY로 할당하는 편이 직관적이고 안전합니다.
- 하드 레퍼런스를 피하고 싶다면 소프트 오브젝트 레퍼런스와 스트리밍을 고려하세요
- 애니메이션과 속도 연동 팁이 있을까요?
- Speed를 애니메이션 BP에서 가져와 Idle/Walk/Run 블렌드 스페이스에 연결합니다.
- 달리기 속도 전환 시 블렌드 파라미터가 자연스럽게 반응합니다.
- 점프 상태는 애님 노티파이로 착지 타이밍을 맞추면 이질감이 줄어듭니다.
- 디버그 HUD로 어떤 값을 보내나요?
- 컨트롤러 Yaw/Pitch, Forward/Right 벡터, MaxWalkSpeed, 점프 가능 여부, 활성 IMC 이름을 화면 좌상단에 표시하면 문제 원인을 빠르게 좁힐 수 있습니다.
- 맵(레벨 디자인)과 이동 값은 어떻게 맞추나요?
- 코너 반경, 장애물 높이, Step Height, 점프 Z를 함께 보정합니다.
- 튜토리얼 구역에서 WASD, 점프, 달리기를 안전하게 익히게 하고, 본 구역은 속도와 시야가 막히지 않게 시야선 확보를 고려합니다.
- 성능 최적화는 언제 하는 게 좋을까요?
- 조작이 완성되는 즉시 가볍게 진행합니다.
- 틱/물리/애님/포스트프로세스 시간을 확인하고, 입력 지연 체감을 QA가 기록하게 합니다.
- 문제 발견 시 요소를 하나씩 끄며 원인을 특정합니다.
오늘 글의 핵심은 IA/IMC로 입력을 하는 것을 알아보는 것입니다. 컨트롤러 회전 기준 벡터로 이동을 단순, 직관화 하는 것입니다.
오늘 글은 여기까지입니다. 읽어주셔서 감사합니다 추가로 궁금하신 사항이 있으시다면 하단의 링크를 참고해 주세요.
[Unreal] 처음 만든 내 게임 맵! 언리얼 레벨 제작&저장 따라 하기
쉽게 따라 할 수 있는 레벨 생성과 저장 언리얼 엔진(Unreal Engine)은 우리가 상상만 하던 장면이나 게...
blog.naver.com
[Unreal] 언리얼 초보 탈출! 프로젝트 세팅에서 꼭 건드려야 할 항목 모음
ochosblogg.blogspot.com
[Unreal] 언리얼 초보 탈출! 에디터 화면 구성 쉽게 설명해드립니다
언리얼 화면 구성과 인터페이스의 기능언리얼 엔진이란 언리얼 엔진은 많은 게임 개발자들이 이용하는 툴입니다. 대표적으로 유명한 게 언리얼과 유니티가 있죠하지만 막상 에픽게임즈 런쳐를
raphaelspace7.com
'Unreal' 카테고리의 다른 글
| [Unreal] 언리얼 초보 탈출! 에디터 화면 구성 쉽게 설명해드립니다 (0) | 2025.05.11 |
|---|