Blueprint 공부 일기 2 (플레이어 움직임 및 애니메이션, Level Streaming)

2026. 3. 16. 12:48·Unreal Project/Blueprint

오늘은 플레이어의 움직임을 블루프린트로 구현해보겠습니다.

 

플레이어 생성 및 입력 처리

플레이어가 움직이기 위해서는 단순히 위치를 이동시키는 것뿐만 아니라,

컨트롤러(Controller), 입력 처리(Input), 그리고 Movement Component와 같은 요소들이 함께 필요합니다.

 

먼저 기본적인 구조를 이해하기 위해 Pawn을 생성하여 간단한 이동을 구현해보고, 

이후 보다 확장된 기능을 제공하는 Character 클래스를 활용하여 움직임을 제어해보겠습니다. 

 

우선 플레이어의 움직임을 구현하기 위해서는 입력 처리 과정이 필요합니다.

이를 위해 먼저 Input Action과 Input Mapping Context를 생성해보겠습니다.

Input Action (Move)

 

위에서 생성한 Input Action은 어떤 입력 값을 받아올지 정의하는 Data Asset으로, 이번 예제에서는 키보드 입력(WASD)을 처리하기 위해 Value Type을 Axis 2D(Vector2D)로 설정하였습니다. 

 

이를 통해 W,A,S,D 입력을 각각 하나의 벡터 값으로 받아와, 플레이어의 이동 방향을 보다 직관적으로 제어할 수 있도록 구성했습니다.

 

 

Input Mapping Context ( IMC_Game)

 

위에서 생성한 IMC_Game은 Input Mapping Context로, 앞서 선언한 IA_Move(Input Action)에 대해 어떤 키 입력이 어떤 축 값(X,Y)으로 들어갈지 정의하는 역할을 합니다.

 

즉, IMC는 단순히 키를 등록하는 것이 아니라 

입력값을 하나의 방향 데이터 (Vector2D)로 변환해주는 관리 역할을 한다고 볼 수 있습니다.

 

계속해서 살펴보면,

키보드 입력은 기본적으로 0 또는 1의 1차원 값으로 들어오기 때문에 이 단계에서 어떤 값이 X축인지, Y축인지 직접 매핑해주어야 합니다. 

 

이를 위해 Swizzle Input Axis을 사용하여 입력 값을 원하는 축으로 재배치해줍니다.

 

예를 들어, 

W/S 입력을 Y축으로 사용하고 싶다면 Swizzle을 통해 해당 값을 Y축으로 전달하도록 설정합니다. 

 

(Tmi. 입력은 기본적으로 PlayerController에서 처리된 후 Pawn으로 전달되는 구조입니다.

 따라서 입력을 Controller에서 직접 처리할 수도 있고, Pawn(또는 Character)에서 처리할 수도 있으며, 프로젝트 구조에 맞게 적절한 위치를 선택하여 구현할 수 있습니다.)

 

 

BP_Pawn Event Graph

 

다음으로는, 앞서 설정한 입력을 실제로 받아 움직일 캐릭터를 구현해보겠습니다.

 

캐릭터가 이동하기 위해서는 Movement Component가 필요하며, 

이번 예제에서는 중력의 영향을 받지 않는 FloatingPawnMovement를 추가하여 기본적인 이동을 구현하엿습니다.

 

(Tmi,  만약 이동처리를 offset을 이용해 한다면 충돌처리가 되지 않는다.)

 

BP_GameMode

 

다음으로는, 앞서 생성한 IMC(Input Mapping Context)과 플레이어를 실제 게임에 적용하기 위해 GameMode Blueprint를 설정해보겠습니다.

 

GameMode는 해당 월드에서 사용할 기본 클래스(플레어어, 컨트롤러 등)를 결정하는 역할을 합니다.

따라서 월드 설정에서 Game Mode를 BP_GameMode로 지정해주어야 우리가 설정한 입력 시스템과 플레이어 로직이 정상적으로 작동하게 됩니다. 

 

 

 

플레이어 애니메이션 동작

이제 플레이어(캐릭터)를 만들고 플레이어 에 애니메이션을 적용하여, 단순한 이동 구현을 넘어 실제 게임과 같은 형태로 확장해보겠습니다.

 

BP_Character Viewport

 

우선 플레이어에 기본적으로 추가된 Component를 살펴보자

  • Capsule Component :   캐릭터의 충돌을 담당하는 컴포넌트
  • Arrow Component     :   캐릭터의 Forward 방향(전방 방향)을 나타내는 기준
  • Character Movement :   플레이어의 이동 및 물리 동작을 처리하는 컴포넌트

 

이제 플레이어를 화면에 비추기 위해 카메라 설정이 필요합니다.

 

이를 위해 Add 버튼을 통해 Spring Arm을 추가하고, 해당 Spring Arm 끝에 Camera를 부착하여 플레이어를 따라다니는 카메라를 구성합니다. 

 

 

Player Event Graph

 

다음은 플레이어에 전달된 입력 값을 실제 이동으로 처리하는 Event Graph 입니다. 

입력 값은 Vector2D로 전달되기 때문에, 이를 각각 분리하여 앞/뒤 이동(Y축) 과 좌/우 이동(X축)에 사용합니다.

 

이후 각 축의 값을 Add Movement Input 노드에 전달하여 플레이어가 입력 방향에 맞게 이동하도록 구현합니다.

 

하지만, 이렇게 구현하면 플레이어는 단순히 이동만 하고 방향은 바뀌지 않는 문제가 발생합니다.

따라서 이번에는 카메라 기준으로 회전까지 함께 적용해보겠습니다.

회전을 추가한 노드

회전을 적용하기 위해 사용하는 핵심 노드는 Get Control Rotation 입니다.

  • Get Control Rotation이란?   → 현재 카메라(컨트롤러)가 바라보는 방향(회전값)을 의미합니다.

  즉, 언리얼 엔진의 기준 축으로 부터 현재 카메라의 회전량을 의미합니다. 

 

입력값은 보통 다음과 같이 나뉩니다.

  • X 입력 (A/D)   →  좌/우 이동 
  • Y 입력 (W/S)   →  앞/뒤 이동

이를 처리하기 위해 

  • X 입력  → 카메라의 Right Vector 사용 
  • Y 입력  → 카메라의 Yaw 값을 기반으로 Forward Vector 생성 

 여기서 Get Right Vector/ Get Foward Vector는 해당 주어진 회전값을 기준으로 해당 방향의 벡터를 생성해주는 노드입니다.

 

 

Spring Arm의 Camera Setting 체크하기

 

Use Pawn Control Rotation을 체크 안하면 카메라가 Control Rotation을 따라가지 않으므로 

 

마우스가 움직임으로써 Controller 회전

 

위와 같은 노드에서 Control Rotation이 따라가지 않게 된다. 

 

따라서 체크한다면 

마우스 움직임 → Control Rotation 변경 → Spring Arm 회전 →  끝에 달린 카메라도 자연스럽게 회전 

이런 흐름으로 작동하게 된다.

 

 

 

 

다음은 플레이어 애니메이션에 대해 조금 다뤄보겠습니다.

 

플레이어의 애니메이션은 보통 AnimInstance에서 관리합니다.

 

AnimInstance의 Evenet Graph 역할 

→ 캐릭터의 상태(속도,점프 여부 등)를 기반으로 어떤 애니메이션을 재생할지 판단하기 위한 값을 업데이트하는 역할

(즉, 애니메이션에 필요한 변수들을 계산하는 곳 ) 

 

AnimInstance의 AnimGraph 역할 

→ AnimGraph는 Event Graph에서 계산된 값을 기반으로 실제 애니메이션을 조합하고 최종 포즈를 만들어 출력하는 역할을 한다.

   (주로, 다음애니메이션과 현재 애니메이션 사이 보간 시간 및 보간 그래프 조절  및 상태 값을 통한 애니메이션 변경 작업을 한다.) 

 

 

Level Streaming이란? 

Level Streaming은 하나의 큰 맵을 여러 개의 Level로 나누고, 필요한 부분만 실시간으로 로드/언로드하는 기능입니다. 

 

 

Level Streaming은 왜 필요한가?

게임에서 맵이 커지면 커질수록 발새앟는 문제로 다음과 같은 경우들이 있다.

- 한 번에 모든 맵을 로드 -> 메모리 과다 사용

- 로딩시간 증가 -> 끊김 현상 발생

- FPS 저하 

이러한 이유로 Unreal에서는 Level Streaming을 사용한다.

Level Streamming 자료

 

 

다음과 같은 Level Streamming을 만들기 위해서는 3개의 Level이 필요하다 

Persistent Level은 전체 맵을 의미하며  그 이후로 SubLevel01, SubLevel02은 각각 나눠진 레벨 구조이다.

 

 

Levels UI 추가하는 방법

 

Levels 추가하면 다음과 같이 Level 구조를 확인할 수 있는 UI가 생성됩니다.

이후 원하는 Level을 Drag & Drop으로 추가하면 Sub Level 구조를 구성할 수 있습니다. 

 

이번에 구현할 Level Streaming 방식

 

1.  특정 지점을 기준으로 로딩 (Trigger 방식) 

→  플레이어가 특정 경로를 지나갈 때 SubLevel02를 로딩하는 방식 

  • Trigger Volume을 이용하여 구현
  • 이벤트 기반 (플레이어 진입 시 로드, 즉 특정 조건 만족 시 발동)

 

Trigger Volume 추가하는 방법

 

해당 방식을 추가하기 위해서는 해당 맵을 클릭후  왼쪽 Place Actor 창에서 Volumes 항목에서 Trigger Volume을 추가하면 된다 

 

TriggerVolume을 추가한 모습

 

 

MainLevel의 BluePrint 여는 방법

 

 

 

BluePrint에 Actor 넣는 방법
MainLevel의 BluePrint Event Graph

 

해당 방법은 Cpp로는 작성할 수 없고 오직 블루프린트로만 가능한 기능으므로 잊지말고 알고있자.

 

적용 후 모습

 

 

2.  카메라 위치 기반 로딩 (Level Streaming Volume 방식) 

→  카메라의 위치에 따라 자동으로 SubLevel02를 로딩을 OnOff하는 방식 

  • Level Streaming Volume 사용 
  • 영역 기반 자동 로딩 ( = 위치 기반 자동 로딩으로 영역 진입 시 발생 ) 

Level Streaming Volume 추가하는 방법

 

LevelStreamingVolume이 추가된 모습

 

LevelStreamingVolume을 적용

 

Level streaming을 적용한 모습

 

 

(Tmi. 블루프린트로 맵을 로드 할때 잊지 말아야 할 것!)

 

 

 

(Tmi+. 그림자가 이상하게 남겨질때 virtual shadow -> shadow map으로 변경하면 해결!)

 

'Unreal Project > Blueprint' 카테고리의 다른 글

Blueprint 공부 일기 7 (Camera Shake, State Alias(점프), UI 이벤트)  (0) 2026.03.23
Blueprint 공부 일기 6 (AI Perception, UI , Billboard , Data Table)  (2) 2026.03.20
Blueprint 공부 일기 5 ( Pawn Sensing 기반 몬스터 탐지 Behavior Tree, Debug 명령어)  (0) 2026.03.19
Blueprint 공부 일기 1 ( 오브젝트 생성 및 충돌 상호작용 )  (1) 2026.03.13
'Unreal Project/Blueprint' 카테고리의 다른 글
  • Blueprint 공부 일기 7 (Camera Shake, State Alias(점프), UI 이벤트)
  • Blueprint 공부 일기 6 (AI Perception, UI , Billboard , Data Table)
  • Blueprint 공부 일기 5 ( Pawn Sensing 기반 몬스터 탐지 Behavior Tree, Debug 명령어)
  • Blueprint 공부 일기 1 ( 오브젝트 생성 및 충돌 상호작용 )
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Unreal Project (17)
        • Khazan 모작 프로젝트 (2)
        • Unreal Study (10)
        • Blueprint (5)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CodingTest
    Unreal Engine
    Game Programming
    hash
    blueprint
    GameProgramming
    Unreal
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
Blueprint 공부 일기 2 (플레이어 움직임 및 애니메이션, Level Streaming)