캐릭터를 처음 만들 때 Idle 애니메이션 하나만 재생하는 것은 어렵지 않습니다. 하지만 이동을 구현하기 시작하면 상황이 달라집니다.
캐릭터가 멈춰 있을 때는 Idle, 움직이기 시작하면 Walk 또는 Run, 공중에 뜨면 Jump 애니메이션이 재생되어야 합니다. 다시 땅에 착지하면 자연스럽게 이동 애니메이션으로 돌아와야 합니다.
언리얼 엔진에서는 이런 캐릭터의 상태에 따른 애니메이션 전환을 관리하기 위해 Animation Blueprint의 State Machine을 사용할 수 있습니다. Epic Games의 Unreal Engine 5.8 공식 문서에서도 State Machine은 Idle, Walk, Run, Jump 같은 이동 상태와 애니메이션을 연결하고 Transition을 통해 상태 전환 조건을 정의하는 시스템으로 설명하고 있습니다.
저도 실제 프로젝트에서 캐릭터 이동 애니메이션을 만들면서 State Machine을 사용하고 있습니다.
처음에는 Idle과 Run 정도만 연결하면 어렵지 않을 것이라고 생각했지만, 실제로 만들어보니 애니메이션을 연결하는 것보다 Speed, IsFalling 같은 값이 제대로 전달되는지 확인하는 과정이 더 중요했습니다.
특히 캐릭터는 정상적으로 움직이는데 Idle 애니메이션에서 Run으로 넘어가지 않거나, 점프 후 착지했는데도 Jump 상태가 계속 유지되는 문제가 발생할 수 있습니다.
이런 경우 Animation Asset 자체보다 Animation Blueprint의 변수와 Transition Rule을 먼저 확인하는 것이 문제를 찾는 데 도움이 됐습니다.
이번 글에서는 기본적인 State Machine 구성 방법과 함께 제가 프로젝트에서 사용하고 있는 방식, 그리고 애니메이션이 제대로 전환되지 않을 때 확인했던 부분까지 같이 정리해보겠습니다.
💡 한 줄 정답 — State Machine은 캐릭터의 현재 상태에 따라 재생할 애니메이션을 자동으로 변경하는 시스템입니다. 기본적으로 Entry → Idle/Walk/Run → Jump 같은 State를 만들고 Speed, IsFalling 등의 값을 Transition Rule에 연결해 상태를 전환합니다.
목차
- State Machine이란?
- Animation Montage와 State Machine 차이
- State Machine 만드는 방법
- Entry와 State 이해하기
- Idle과 Run State 만들기
- Speed 변수로 Idle과 Run 전환하기
- Transition Rule이란?
- Jump State 추가하기
- IsFalling으로 점프 상태 판단하기
- Blend Space와 State Machine 함께 사용하기
- State Machine 애니메이션이 전환되지 않을 때
- State Machine과 Montage를 함께 사용하는 방법
- 마무리
State Machine이란?
State Machine은 이름 그대로 캐릭터의 여러 State(상태)를 만들고 특정 조건이 충족됐을 때 다른 State로 이동시키는 시스템입니다.
가장 기본적인 캐릭터를 생각해보겠습니다.
Entry
↓
Idle
↓
Run
↓
Jump
실제로는 한 방향으로만 이동하는 것이 아니라 다음처럼 서로 상태가 전환됩니다.
Jump
↗ ↘
Entry → Idle ↔ Run
예를 들어 캐릭터의 속도가 0이라면 Idle 상태를 유지합니다.
Speed = 0
→ Idle
이동을 시작해 Speed가 증가하면 Run으로 전환합니다.
Speed > 0
→ Run
Character Movement Component가 Falling 상태라면 Jump로 이동하도록 만들 수도 있습니다.
IsFalling = True
→ Jump
Epic Games 공식 문서에서도 State Machine은 Animation Blueprint 내부에서 상태별 애니메이션을 정의하고 Transition을 이용해 상태 사이의 전환을 제어하는 구조라고 설명합니다.

[언리얼 엔진 Animation Blueprint State Machine 구조]
직접 만들면서 확인했던 State Machine 문제
State Machine을 직접 구성하면서 느낀 점은 애니메이션이 이상할 때 State Machine 자체만 보고 있으면 오히려 원인을 찾기 어렵다는 것입니다.
제가 먼저 확인하는 부분은 Animation Blueprint의 Speed와 IsFalling 값입니다.
캐릭터는 움직이는데 Idle에서 Run으로 넘어가지 않을 때
캐릭터가 실제 게임에서는 정상적으로 움직이는데 애니메이션만 Idle 상태에 머무는 경우가 있습니다.
이럴 때는 Run Animation을 다시 연결하기 전에 Speed 값부터 확인하는 것이 좋습니다.
Animation Blueprint를 실행한 상태에서 Debug Filter로 실제 캐릭터를 선택하고 Speed 값이 변하는지 확인합니다.
캐릭터가 움직이는데도 계속 Speed = 0이라면 State Machine보다 Event Graph 쪽을 먼저 확인해야 합니다.
제가 사용하는 기본 구조는 다음과 같습니다.
Try Get Pawn Owner → Get Velocity → Vector Length XY → Set Speed
여기에서 Pawn Reference를 제대로 가져오지 못하거나 Speed 값이 갱신되지 않으면 Speed > 5 같은 Transition Rule을 만들어도 Run State로 넘어갈 수 없습니다.
Run으로 넘어간 뒤 Idle로 돌아오지 않을 때
처음 State Machine을 만들 때 놓치기 쉬운 부분입니다.
Idle → Run Transition만 만들어 놓으면 캐릭터가 한번 Run 상태로 들어간 뒤 다시 Idle로 돌아오지 않을 수 있습니다.
그래서 반대 방향의 Transition도 함께 구성해야 합니다.
Idle → Run : Speed > 5
Run → Idle : Speed <= 5
State Machine에서는 State를 만드는 것만큼 양쪽 Transition 조건을 제대로 구성했는지 확인하는 것이 중요했습니다.
점프 후 Idle 또는 Locomotion으로 돌아오지 않을 때
점프 애니메이션에서 문제가 발생한다면 IsFalling 값을 확인합니다.
공중에서는
IsFalling = True
가 되고 착지하면
IsFalling = False
로 돌아와야 합니다.
따라서 Jump로 들어가는 Transition뿐 아니라 Jump에서 Locomotion으로 돌아오는 Transition도 필요합니다.
예를 들어 제가 확인하는 기본 구조는 다음과 같습니다.
Locomotion → Jump : IsFalling = True
Jump → Locomotion : IsFalling = False
캐릭터가 이미 지면에 착지했는데 Jump 애니메이션이 계속 재생된다면 Animation을 교체하기 전에 IsFalling 값이 실제로 False로 변경되는지부터 확인하는 것이 좋습니다.

PIE 실행 상태에서 Animation Blueprint Debug Filter로 캐릭터를 선택하고
Speed,IsFalling값을 확인하는 실제 화면
이런 식으로 실제 실행 중인 값을 확인하면 단순히 State Machine Graph만 보는 것보다 문제의 위치를 훨씬 빠르게 좁힐 수 있었습니다.
Animation Montage와 State Machine 차이
앞선 글에서 Animation Montage를 살펴봤기 때문에 둘의 차이를 먼저 이해하는 것이 좋습니다.
둘 다 애니메이션을 재생하지만 사용하는 목적이 다릅니다.
| 구분 | State Machine | Animation Montage |
|---|---|---|
| 주요 목적 | 지속적인 상태 관리 | 특정 액션 실행 |
| Idle | 적합 | 비추천 |
| Walk / Run | 적합 | 비추천 |
| Jump | 적합 | 상황에 따라 가능 |
| Attack | 경우에 따라 | 적합 |
| Combo | 복잡함 | 적합 |
| Skill | 복잡함 | 적합 |
| 상태 전환 | Transition Rule | Section/Blueprint |
| 반복 애니메이션 | 적합 | 가능하지만 목적이 다름 |
쉽게 정리하면 다음과 같습니다.
Idle
Walk
Run
Jump
Falling
↓
State Machine
반면,
Attack
Combo
Skill
Finisher
Reload
↓
Animation Montage
처럼 생각하면 처음 구조를 설계할 때 이해하기 쉽습니다.
State Machine은 특히 캐릭터 locomotion처럼 계속해서 현재 상태를 평가해야 하는 애니메이션에 많이 사용됩니다.
State Machine 만드는 방법
먼저 캐릭터가 사용하는 Animation Blueprint를 엽니다.
왼쪽의 My Blueprint에서 AnimGraph로 이동합니다.
AnimGraph 빈 공간을 우클릭한 다음 다음 메뉴를 선택합니다.
Right Click
↓
State Machines
↓
Add New State Machine
새로운 State Machine이 만들어지면 이름을 알아보기 쉽게 변경합니다.
예를 들면 다음과 같습니다.
Locomotion
그리고 State Machine의 Pose 출력을 Output Pose에 연결합니다.
Locomotion
│
▼
Output Pose
Epic Games의 UE 5.8 공식 가이드 역시 AnimGraph에서 State Machines → Add New State Machine으로 생성한 뒤 결과를 최종 Animation Pose에 연결하는 방법을 안내합니다.

[언리얼 엔진 State Machine 생성 방법]
Entry와 State 이해하기
State Machine을 더블 클릭해서 들어가면 가장 먼저 볼 수 있는 것이 Entry입니다.
Entry는 State Machine이 처음 실행됐을 때 어느 State부터 시작할지를 결정하는 시작 지점입니다.
보통 이동 시스템에서는 Idle이나 Locomotion을 기본 State로 지정합니다.
Entry
│
▼
Idle
Epic 공식 문서에서도 일반적인 locomotion State Machine에서는 Entry가 Idle 같은 기본 상태로 연결되는 구성을 예로 들고 있습니다.
State를 만들려면 빈 공간을 우클릭합니다.
Right Click
↓
Add State
그리고 이름을 지정합니다.
예를 들어:
Idle
Run
Jump
각 State를 더블 클릭하면 그 State에서 재생할 애니메이션 로직을 설정할 수 있습니다.
Idle과 Run State 만들기
먼저 가장 기본적인 두 가지 상태를 만들어보겠습니다.
Idle
Run
Idle State를 더블 클릭합니다.
State 내부에는 Output Animation Pose가 있습니다.
Idle Animation Sequence를 넣고 연결합니다.
A_Idle
│
▼
Output Animation Pose
Run도 동일합니다.
A_Run
│
▼
Output Animation Pose
다시 State Machine으로 돌아오면 다음 구조가 됩니다.
Entry
│
▼
Idle ⇄ Run
여기서 중요한 것이 두 State 사이에 있는 Transition입니다.
Transition이 없으면 Idle에서 Run으로 자동으로 넘어가지 않습니다.

[언리얼 엔진 Idle Run State Machine]
Speed 변수로 Idle과 Run 전환하기
Idle과 Run을 전환하려면 먼저 캐릭터가 움직이고 있는지를 판단해야 합니다.
가장 많이 사용하는 방법이 Velocity에서 이동 속도를 구하는 것입니다.
Animation Blueprint Event Graph에서 다음과 같은 구조를 만들 수 있습니다.
Event Blueprint Update Animation
↓
Try Get Pawn Owner
↓
Get Velocity
↓
Vector Length XY
↓
Set Speed
이렇게 하면 캐릭터의 현재 수평 이동 속도를 Speed 변수에 저장할 수 있습니다.
예를 들어 캐릭터가 멈춰 있으면:
Speed = 0
이동하면:
Speed = 350
처럼 값이 증가합니다.
이제 이 값을 State Machine의 Transition Rule에서 사용할 수 있습니다.
Transition Rule이란?
Transition Rule은 현재 State에서 다음 State로 이동할 수 있는 조건입니다.
Idle과 Run 사이에 있는 Transition 아이콘을 더블 클릭하면 Transition Rule Graph가 열립니다.
Idle → Run은 다음처럼 만들 수 있습니다.
Speed
↓
> 5.0
↓
Can Enter Transition
즉,
Speed > 5
이면 Run으로 이동합니다.
반대로 Run → Idle은:
Speed
↓
<= 5.0
↓
Can Enter Transition
으로 만들 수 있습니다.
Epic의 공식 캐릭터 애니메이션 예제에서도 Boolean 변수를 Transition Result의 Can Enter Transition에 연결해 Idle과 Run 등의 상태를 전환하는 구조를 사용합니다.
Transition은 단순히 상태를 순간적으로 교체하는 것이 아니라 Blend를 이용해 이전 애니메이션에서 다음 애니메이션으로 자연스럽게 넘어가도록 설정할 수도 있습니다.
Jump State 추가하기
이제 Jump를 추가해보겠습니다.
State Machine에 새로운 State를 생성합니다.
Jump
기본 구조는 다음과 같이 만들 수 있습니다.
Jump
↗ ↘
Entry → Idle ↔ Run
프로젝트가 조금 더 복잡해지면 점프를 여러 State로 나눌 수도 있습니다.
JumpStart
↓
JumpLoop
↓
JumpEnd
Epic의 UE 5.8 캐릭터 애니메이션 가이드에서도 예제로 Idle, Run, JumpStart, JumpLoop, JumpEnd State를 구성합니다.
처음 배우는 단계라면 Jump 하나로 시작한 뒤 필요할 때 3단계 구조로 확장하는 것이 이해하기 쉽습니다.

[언리얼 엔진 Jump State Machine 구성]
IsFalling으로 점프 상태 판단하기
캐릭터가 공중에 있는지 확인할 때 많이 사용하는 것이 Is Falling입니다.
Animation Blueprint에서 캐릭터의 Movement Component를 가져온 다음 Is Falling 값을 변수에 저장합니다.
개념적으로는 다음 구조입니다.
Character
↓
Character Movement
↓
Is Falling
↓
Set IsFalling
그리고 Transition Rule에서는:
IsFalling
↓
Can Enter Transition
으로 연결합니다.
IsFalling = True가 되면 Jump State로 이동하도록 만드는 것입니다.
Idle / Run
│
IsFalling = True
│
▼
Jump
캐릭터가 다시 지면에 도착하면 IsFalling = False가 되므로 Jump에서 Locomotion 상태로 돌아오게 만들 수 있습니다. Epic 공식 예제 역시 IsFalling 변수를 이용해 Run에서 JumpStart로 전환하는 방식을 보여줍니다.

[언리얼 엔진 IsFalling 점프 애니메이션 설정]
Blend Space와 State Machine 함께 사용하기
실제 게임에서는 Idle과 Run을 각각 State로 만드는 것보다 하나의 Locomotion State 내부에 Blend Space를 넣는 방법도 많이 사용합니다.
예를 들어:
Entry
↓
Locomotion
↓
Jump
Locomotion 내부에는:
Speed = 0
↓
Idle
Speed = 200
↓
Walk
Speed = 500
↓
Run
처럼 Speed 값에 따라 Animation이 Blend되도록 구성할 수 있습니다.
그러면 State Machine은 큰 상태만 관리합니다.
Locomotion
Jump
Falling
Land
세부적인 이동 속도 변화는 Blend Space가 담당합니다.
이렇게 역할을 분리하면 State가 지나치게 많아지는 것을 줄이고 Animation Blueprint 구조를 관리하기 쉬워집니다.
State Machine 애니메이션이 전환되지 않을 때
State Machine을 만들었는데 Idle에서 Run으로 넘어가지 않는다면 무작정 Animation Asset부터 바꾸기보다는 Transition 조건을 먼저 확인하는 것이 좋습니다.
다음 순서로 확인해보세요.
State 전환 안 됨
↓
Speed 값이 실제로 변하는가?
↓
Transition Rule 조건이 맞는가?
↓
Can Enter Transition이 True인가?
↓
반대 방향 Transition도 만들었는가?
↓
State 내부 Animation이 연결됐는가?
↓
Animation Blueprint가 캐릭터 Mesh에 적용됐는가?
특히 초보자가 자주 하는 실수가:
Idle → Run
Transition만 만들고
Run → Idle
을 만들지 않는 것입니다.
그러면 캐릭터가 한번 Run으로 넘어간 뒤 Idle로 돌아오지 않을 수 있습니다.
또한 Animation Blueprint의 Event Graph에서 Speed나 IsFalling 값 자체가 제대로 업데이트되는지도 확인해야 합니다.
State Machine과 Montage를 함께 사용하는 방법
여기까지 이해하면 앞에서 살펴본 Animation Montage와 연결할 수 있습니다.
기본 이동은 State Machine이 담당합니다.
State Machine
Idle
Walk
Run
Jump
공격은 Montage가 담당합니다.
Animation Montage
Attack01
Attack02
Attack03
Skill
AnimGraph에서는 프로젝트 구조에 따라 Slot을 이용해 Montage 결과를 State Machine의 기본 Pose 위에 적용할 수 있습니다.
개념적으로는:
State Machine
↓
Default Locomotion Pose
↓
Slot
↓
Montage
↓
Output Pose
이렇게 역할을 나누면 캐릭터는 평소에는 State Machine에 따라 걷고 뛰다가 공격 입력이 들어왔을 때 Montage를 이용해 공격 Animation을 실행할 수 있습니다.
즉 지금까지 다룬 내용을 하나로 연결하면:
State Machine
↓
Idle / Run / Jump
↓
Attack Input
↓
Play Montage
↓
On Notify Begin
↓
Switch on Name
↓
AttackHit
↓
Sphere Trace For Objects
↓
Break Hit Result
↓
Apply Damage
라는 하나의 전투 Animation 구조가 완성됩니다.
실제 프로젝트에서는 이동과 공격 애니메이션의 역할을 분리해서 사용하는 편이 관리하기 편했습니다.
평상시 Idle, Run, Jump 같은 이동은 State Machine이 계속 관리하고, 공격이나 스킬처럼 특정 입력에 의해 한 번 실행되는 애니메이션은 Montage로 처리했습니다.
다만 Montage가 실행된 뒤 공격이나 스킬 상태를 별도의 Boolean으로 관리하고 있다면 애니메이션이 끝났다고 해서 해당 상태까지 자동으로 초기화되는 것은 아닙니다.
저도 전투 시스템을 만들면서 공격이나 다른 액션에 의해 애니메이션이 중단됐을 때 상태값이 남아 이후 입력이 정상적으로 처리되지 않는 문제를 확인한 적이 있습니다.
그래서 State Machine과 Montage를 함께 사용할 때는 애니메이션 전환뿐 아니라 Montage 종료 또는 Interrupt 이후 캐릭터의 상태값이 정상적으로 초기화되는지도 함께 확인하고 있습니다.
마무리
State Machine은 언리얼 엔진 Animation Blueprint를 이해하기 위해 꼭 알아두어야 하는 기능입니다.
핵심은 어렵지 않습니다.
현재 캐릭터 상태
↓
Animation Blueprint 변수
↓
Transition Rule
↓
State 변경
↓
Animation 변경
가장 먼저 다음 정도의 구조를 직접 만들어보는 것을 추천합니다.
Entry
↓
Locomotion
↕
Jump
처음 State Machine을 사용할 때는 State를 많이 만드는 것보다 Idle/Locomotion → Jump 정도의 간단한 구조부터 직접 만들어보는 것이 이해하기 쉬웠습니다.
저도 프로젝트에서는 Locomotion 안에서 Speed 기반 Blend Space를 사용하고, 캐릭터가 공중에 있는지는 IsFalling 값으로 판단하는 방식으로 구성하고 있습니다.
그리고 애니메이션이 예상대로 전환되지 않을 때는 Animation Asset을 계속 바꾸기보다 Animation Blueprint에서 Speed와 IsFalling 값이 실제로 어떻게 변하고 있는지 먼저 확인하는 것이 문제를 찾는 데 도움이 됐습니다.
이동 애니메이션이 정상적으로 만들어졌다면 이후 공격이나 스킬은 Animation Montage, 실제 타격 시점은 Anim Notify와 Trace를 이용하는 방식으로 하나씩 확장할 수 있습니다.
앞으로도 프로젝트를 제작하면서 State Machine이나 Animation Blueprint에서 실제로 발생했던 문제와 해결 과정은 계속 추가해볼 예정입니다.
참고 사이트
이번 글은 Unreal Engine 5.8 공식 문서를 기준으로 확인했습니다.
- Epic Games – State Machines in Unreal Engine — State, Entry, Transition과 State Machine 구성 방법을 확인할 수 있습니다.
- Epic Games – Adding Character Animation — Idle, Run, Jump와 Transition Variable을 이용한 실제 구성 예제가 있습니다.
- Epic Games – Animation Blueprint Editor — AnimGraph와 State Machine 등 Animation Blueprint Editor의 전체 구조를 확인할 수 있습니다.