본문으로 건너뛰기

안동민 개발노트

본문 시작

스테이트 머신의 기본 활용

Idle·Walk·Run 상태와 속도 기반 전환 규칙을 만들어 캐릭터 움직임에 맞는 애니메이션 흐름을 제어합니다.

지난 절에서 애님 그래프 기본 구성 요소를 살펴보며 스테이트 머신(State Machine)이 캐릭터 애니메이션 제어의 핵심임을 확인했습니다.

이번 절에서는 스테이트 머신을 더 깊게 이해하고, 실제 캐릭터 움직임 기반으로 애니메이션 상태를 관리하는 방법을 정리합니다.

스테이트 머신의 기본 활용

스테이트 머신은 속도, 점프, 착지 같은 애님 인스턴스 변수를 기준으로 Idle, Walk, Run 상태와 전환 조건을 고정하는 애니메이션 제어 구조입니다.

  1. 스테이트 머신 개념

    상태 1 스테이트 머신(State Machine)은 특정 조건에 따라 캐릭터의 애니메이션 상태를 전환하고 관리하는 애님 그래프의 핵심 노드입니다.

  2. 스테이트 머신의 기본 구성 요소

    상태 2 State 노드, 전환 규칙, Blend Result를 분리해 어떤 변수로 상태가 바뀌는지 확인합니다.

  3. 스테이트 머신 활용 예시: Idle, Walk, Run

    상태 3 Idle, Walk, Run 상태는 Speed 값의 범위와 Blend Result 연결을 먼저 고정한 뒤 전환 규칙을 붙입니다.


스테이트 머신이란 무엇인가?

스테이트 머신(State Machine)은 특정 조건에 따라 캐릭터의 애니메이션 상태를 전환하고 관리하는 애님 그래프의 핵심 노드입니다.

마치 신호등이 빨간 불, 노란 불, 초록 불이라는 상태를 가지며, 정해진 시간이나 규칙에 따라 이 상태들을 전환하는 것과 같습니다.

캐릭터 애니메이션에서 상태는 일반적으로 특정 행동을 나타냅니다.

예를 들어, Idle (대기), Walk (걷기), Run (달리기), Jump (점프), Attack (공격) 등이 상태가 될 수 있습니다.

스테이트 머신이 필요한 이유
  • 명확한 상태 관리: 캐릭터가 어떤 애니메이션 상태에 있는지 시각적으로 명확하게 파악하고 관리할 수 있습니다.
  • 부드러운 전환: 각 상태 간의 전환 규칙(전환 규칙)을 정의하여 애니메이션이 갑자기 끊기지 않고 자연스럽게 이어지도록 합니다.
  • 복잡한 로직 단순화: 다양한 애니메이션 조합과 전환 로직을 스테이트 머신이라는 구조 안에서 체계적으로 구성할 수 있습니다.
  • 디버깅 용이성: 특정 상태에서 애니메이션이 제대로 재생되지 않거나 전환이 이상할 때, 해당 상태와 전환 규칙만 집중적으로 살펴볼 수 있어 문제 해결이 용이합니다.

스테이트 머신의 기본 구성 요소

스테이트 머신을 더블클릭하여 진입하면 다음과 같은 요소들을 볼 수 있습니다.

상태 (State)
  • 캐릭터의 특정 행동을 나타내는 상자 모양의 노드입니다. 각 상태 안에는 해당 상태에서 재생될 애니메이션 로직(애니메이션 시퀀스, 블렌드 스페이스 등)이 들어갑니다.
  • 진입점(Entry Point): 스테이트 머신에 처음 진입할 때 시작되는 기본 상태입니다.
전환 규칙 (전환 규칙)
  • 두 상태를 연결하는 화살표 모양의 선입니다. 이 선은 한 상태에서 다른 상태로 전환될 수 있는 경로를 나타냅니다.
  • 전환 규칙을 더블클릭하면 해당 전환이 발생할 조건을 정의하는 별도의 그래프(Transition Graph)가 열립니다.

스테이트 머신 내부에서는 상태 상자보다 연결선의 조건이 실제 동작을 결정합니다.

Entry에서 시작해 전환 규칙을 거쳐 다시 복귀하는 흐름으로 보면 구조를 놓치지 않습니다.

상태보다 전환 규칙을 먼저 읽기

Entry가 시작 상태를 고르고, 각 전환 규칙이 Speed 같은 변수로 다음 상태 진입 여부를 결정합니다.

  1. 상태 내부는 포즈 생성

    State Idle 상태는 Animation Sequence Player, WalkRun 상태는 Blend Space Player처럼 출력 포즈를 준비합니다.

  2. 전환 규칙은 조건 판정

    Transition Speed > 0.1이면 이동 상태로, Speed < 0.1이면 대기 상태로 돌아가게 만듭니다.

  3. 연결선이 전환 시간을 가진다

    Blend Transition Duration과 Blend Mode를 조절해 상태가 바뀔 때 포즈가 끊기지 않게 합니다.


스테이트 머신 활용 예시: Idle, Walk, Run

Idle, Walk, Run은 속도와 입력 조건으로 오간다

스테이트 머신은 노드 이름보다 어떤 값이 전이를 여는지 보여야 튐 없이 읽힌다.

  1. Idle

    Speed = 0, 이동 입력 없음

  2. Walk

    낮은 Speed 또는 걷기 입력

  3. Run

    Sprint 입력과 높은 Speed

전이조건
Idle -> WalkSpeed가 0보다 커지고 이동 입력이 들어온다.
Walk -> RunSprint가 켜지고 Speed가 Run 기준을 넘는다.
Run -> WalkSprint가 꺼지거나 Speed가 내려간다.
Walk -> Idle입력과 Speed가 모두 사라진다.

지난 절에서 언급했던 Idle, Walk, Run 상태를 가진 스테이트 머신을 자세히 구현해봅시다.

이 예시는 대부분의 캐릭터 애니메이션 시스템의 기본이 됩니다.

필요한 에셋
  • Idle 애니메이션 시퀀스 (예: SKM_Mannequin_Idle)
  • Walk_Run_BlendSpace (2D 블렌드 스페이스, X축: Speed, Y축: Direction (선택 사항), 포함 애니메이션: Walk, Run)
애님 블루프린트 설정

애님 블루프린트 열기: 여러분의 캐릭터 스켈레톤에 연결된 애님 블루프린트 (예: ABP_Mannequin)를 엽니다.

이벤트 그래프 설정 (변수 업데이트)
  • Event Blueprint Update Animation 노드를 가져옵니다. 이 이벤트는 매 프레임마다 애니메이션을 업데이트하기 위해 호출됩니다.
  • Try Get Pawn Owner 노드를 가져와 이 애니메이션 블루프린트를 사용하는 폰(Pawn, 즉 캐릭터)의 참조를 얻습니다.
  • Try Get Pawn OwnerReturn Value에서 드래그하여 IsValid 노드를 연결하여 폰이 유효한지 확인합니다.
  • IsValidIs Valid 핀 뒤에 폰을 Cast To Character (또는 Cast To BP_PlayerCharacter)로 캐스팅합니다.
  • 캐스팅 성공 핀(As Character)에서 Get Velocity 노드를 호출하여 현재 이동 속도를 얻습니다.
  • Get VelocityReturn Value에서 Vector Length 노드를 호출하여 속도 벡터의 크기(절대 속도)를 계산합니다.
  • 이 속도 값을 저장할 Speed라는 Float 타입 변수를 애님 블루프린트에 추가하고, Set Speed 노드를 연결하여 업데이트합니다. (Speed 변수는 나중에 스테이트 머신의 전환 규칙과 블렌드 스페이스에서 사용됩니다.)
  • 컴파일 및 저장합니다.
애님 그래프 - 스테이트 머신 설정
  • 애님 그래프 탭으로 이동합니다.
  • Default State Machine 노드를 더블클릭하여 내부로 진입합니다.
  • Entry 노드에서 Idle 상태로 연결되는 선이 없다면, Entry 노드에서 드래그하여 Add State를 선택하고 Idle이라는 상태를 만듭니다.
  • Idle 상태를 선택하고 디테일 패널에서 Animation / Asset Player 섹션에 Idle 애니메이션 시퀀스를 연결합니다. 또는 Idle 상태를 더블클릭하여 내부로 진입한 후, Animation Sequence Player 노드를 배치하고 Idle 애니메이션을 연결한 뒤 Output Pose에 연결합니다.
  • Idle 상태에서 드래그하여 Add State를 선택하고 Walk_Run이라는 상태를 만듭니다.
  • Walk_Run 상태를 더블클릭하여 내부로 진입합니다.
    • Blend Space Player 노드를 배치하고, Blend Space 핀에 Walk_Run_BlendSpace를 연결합니다.
    • Blend Space Player의 입력 핀(Speed 또는 Speed, Direction)에 애님 블루프린트의 Speed 변수(Get 노드)를 연결합니다.
    • Output Pose 노드에 연결합니다.
  • 전환 규칙 설정
    • Idle에서 Walk_Run으로 가는 전환 규칙 선을 더블클릭합니다.
    • Can Enter Transition 출력 핀에 연결될 로직을 만듭니다. Speed 변수(Get 노드)를 가져와 > (보다 큼) 노드를 연결하고, 0.1과 비교합니다. (미세한 움직임에도 전환되지 않도록 작은 값을 사용)
    • Walk_Run에서 Idle로 가는 전환 규칙 선을 더블클릭합니다.
    • Can Enter Transition 출력 핀에 연결될 로직을 만듭니다. Speed 변수(Get 노드)를 가져와 < (보다 작음) 노드를 연결하고, 0.1과 비교합니다.
  • 컴파일 및 저장합니다.

스테이트 머신은 상태보다 전환 규칙이 많아질 때 복잡해집니다.

조건을 짧게 나누고 우선순위를 점검하면 디버깅이 쉬워집니다.

전환 고착은 결과에서 입력 원천으로 역추적한다

상태 그래프를 바로 고치지 말고, 멈춘 포즈에서 전환식과 변수 갱신 지점까지 한 프레임씩 거슬러 올라간다.

  1. 현재 State를 고정한다

    · 결과 디버그 필터에서 실제 Pawn과 재생 포즈가 어느 상태에 멈췄는지 확인한다.

  2. 전환식의 참·거짓을 본다

    · 규칙 진입 조건뿐 아니라 빠져나오는 반대 방향 규칙도 같은 프레임에서 평가한다.

  3. AnimBP 값을 대조한다

    · 변수 Speed 와 IsFalling 이 Pawn의 실제 상태와 일치하는지 비교한다.

  4. 갱신이 끊긴 곳을 찾는다

    · 원천 Event Graph의 변수 대입과 착지 이벤트가 전환 평가 전에 전달되는지 추적한다.


스테이트 머신 활용 시 고려사항

  • 상태 전환 블렌딩: 스테이트 머신은 기본적으로 상태 전환 시 두 애니메이션을 부드럽게 블렌딩합니다. 전환 규칙 선을 선택하고 디테일 패널에서 Transition Duration (전환 시간), Blend Mode, Blend Curve 등을 조절하여 블렌딩 방식을 세밀하게 제어할 수 있습니다.
  • 전환 우선순위: 여러 전환 규칙이 동시에 충족될 수 있는 경우, 언리얼 엔진은 기본적으로 가장 오래된 (먼저 생성된) 전환 규칙에 우선순위를 둡니다. 복잡한 상황에서는 Transition Priority를 조절하거나, Conduit 노드를 사용하여 전환 로직을 단순화할 수 있습니다.
  • 콘딧 (Conduit): 여러 상태가 공통된 전환 규칙을 가질 때, 이 규칙을 한곳에 모아 관리할 수 있는 노드입니다. 스테이트 머신 그래프를 깔끔하게 유지하는 데 도움을 줍니다.
  • 캐시 포즈 (Cached Pose): 동일한 애니메이션 포즈를 여러 상태나 블렌딩 로직에서 재사용해야 할 때, 해당 포즈를 캐시 포즈로 저장해두고 여러 곳에서 불러와 사용하면 성능 최적화와 가독성 향상에 도움이 됩니다.
  • 애님 노티파이 (Anim Notify): 애니메이션 재생 중 특정 프레임에서 이벤트를 발생시키는 기능입니다. (예: 발소리 재생, 무기 타격 지점 설정 등) 이는 애님 블루프린트의 이벤트 그래프에서 수신하여 게임플레이 로직을 트리거할 수 있습니다.

스테이트 머신은 캐릭터 애니메이션 흐름을 상태와 전환 규칙으로 나눠 관리하는 방식입니다.

이동, 점프, 공격처럼 조건이 분명한 애니메이션 전환에 자주 사용됩니다.

마지막으로 스테이트 머신을 만들고 나면 상태 이름보다 변수 → 전환 규칙 → 블렌드 → 복귀 조건이 서로 맞는지 확인해야 합니다.

아래 점검표처럼 나누어 보면 어디서 전환이 끊기는지 빠르게 찾을 수 있습니다.

전환이 끊길 때 보는 네 가지 기준

Idle, WalkRun, Jump 같은 상태는 전환 조건과 복귀 조건까지 함께 읽어야 안정적으로 동작합니다.

  1. 입력 값이 먼저 맞아야 한다

    Variable Event Blueprint Update Animation에서 Speed, IsInAir, IsAttacking이 매 프레임 갱신되는지 확인합니다.

  2. 전환 조건은 짧게 분리한다

    규칙 Idle to WalkRun처럼 한 경로에는 하나의 판단 목적만 두면 디버깅이 쉬워집니다.

  3. 전환 시간은 동작 크기에 맞춘다

    Blend 짧은 정지 전환은 빠르게, 점프나 공격 복귀는 너무 급하지 않게 조절합니다.

  4. 나가는 조건도 같이 만든다

    Return 이동으로 들어가는 규칙만 있고 Idle로 돌아오는 규칙이 약하면 상태가 고정됩니다.


이번 절에서는 애니메이션 블루프린트의 핵심인 스테이트 머신의 기본 개념과 Idle, Walk, Run 예시를 통한 활용 방법을 자세히 알아보았습니다.

스테이트 머신은 캐릭터 애니메이션의 흐름을 제어하는 데 필수적인 요소입니다.

마지막으로 스테이트 머신 전환 조건을 안정적으로 읽기 위한 변수, 임계값, 전환 시간 기준을 정리합니다.

State Machine 전환 조건 점검

Idle, Walk, Run 전환은 애니메이션 클립보다 조건식과 임계값이 더 자주 문제를 만듭니다.

  1. 전환 규칙은 한 방향씩 읽기

    Idle to Walk와 Walk to Idle은 서로 다른 조건이므로 Speed 기준과 남은 블렌드 시간을 각각 확인합니다. 01 Speed, IsInAir, bIsCrouching 같은 변수는 Event Graph에서 갱신하고 State Machine은 읽기만 합니다. 02 Walk 시작은 Speed > 10, Idle 복귀는 Speed < 5처럼 약간의 여유를 두면 경계 떨림이 줄어듭니다. 03 Transition Duration이 너무 길면 입력 반응이 늦고, 너무 짧으면 포즈가 튀므로 이동감에 맞춰 조정합니다.

  2. 전환 규칙은 한 방향씩 읽기

    Idle to Walk와 Walk to Idle은 서로 다른 조건이므로 Speed 기준과 남은 블렌드 시간을 각각 확인합니다.

  3. 입력 변수

    Speed, IsInAir, bIsCrouching 같은 변수는 Event Graph에서 갱신하고 State Machine은 읽기만 합니다.

  4. 임계값

    Walk 시작은 Speed > 10, Idle 복귀는 Speed < 5처럼 약간의 여유를 두면 경계 떨림이 줄어듭니다.

  5. 전환 시간

    Transition Duration이 너무 길면 입력 반응이 늦고, 너무 짧으면 포즈가 튀므로 이동감에 맞춰 조정합니다.