스테이트 머신의 기본 활용
Idle과 Walk_Run 상태 및 속도 기반 전환 규칙을 만들고, 이동 상태 안에서 걷기와 달리기를 블렌딩합니다.
지난 절에서 애님 그래프 기본 구성 요소를 살펴보며 스테이트 머신(State Machine)이 캐릭터 애니메이션 제어의 핵심임을 확인했습니다.
이번 절에서는 스테이트 머신을 더 깊게 이해하고, 실제 캐릭터 움직임 기반으로 애니메이션 상태를 관리하는 방법을 정리합니다.
스테이트 머신이란 무엇인가?
스테이트 머신(State Machine)은 특정 조건에 따라 캐릭터의 애니메이션 상태를 전환하고 관리하는 애님 그래프의 핵심 노드입니다.
마치 신호등이 빨간 불, 노란 불, 초록 불이라는 상태를 가지며, 정해진 시간이나 규칙에 따라 이 상태들을 전환하는 것과 같습니다.
캐릭터 애니메이션에서 상태는 일반적으로 특정 행동을 나타냅니다.
예를 들어, Idle (대기), Walk (걷기), Run (달리기), Jump (점프), Attack (공격) 등이 상태가 될 수 있습니다.
- 명확한 상태 관리: 캐릭터가 어떤 애니메이션 상태에 있는지 시각적으로 명확하게 파악하고 관리할 수 있습니다.
- 부드러운 전환: 각 상태 간의 전환 규칙(전환 규칙)을 정의하여 애니메이션이 갑자기 끊기지 않고 자연스럽게 이어지도록 합니다.
- 복잡한 로직 단순화: 다양한 애니메이션 조합과 전환 로직을 스테이트 머신이라는 구조 안에서 체계적으로 구성할 수 있습니다.
- 디버깅 용이성: 특정 상태에서 애니메이션이 제대로 재생되지 않거나 전환이 이상할 때, 해당 상태와 전환 규칙만 집중적으로 살펴볼 수 있어 문제 해결이 용이합니다.
스테이트 머신의 기본 구성 요소
스테이트 머신을 더블클릭하여 진입하면 다음과 같은 요소들을 볼 수 있습니다.
- 캐릭터의 특정 행동을 나타내는 상자 모양의 노드입니다. 각 상태 안에는 해당 상태에서 재생될 애니메이션 로직(애니메이션 시퀀스, 블렌드 스페이스 등)이 들어갑니다.
- 진입점(Entry Point): 스테이트 머신에 처음 진입할 때 시작되는 기본 상태입니다.
- 두 상태를 연결하는 화살표 모양의 선입니다. 이 선은 한 상태에서 다른 상태로 전환될 수 있는 경로를 나타냅니다.
- 전환 규칙을 더블클릭하면 해당 전환이 발생할 조건을 정의하는 별도의 그래프(Transition Graph)가 열립니다.
스테이트 머신 내부에서는 상태 상자보다 연결선의 조건이 실제 동작을 결정합니다.
Entry에서 시작해 전환 규칙을 거쳐 다시 복귀하는 흐름으로 보면 구조를 놓치지 않습니다.
스테이트 머신 활용 예시: Idle과 Walk_Run
Idle과 Walk_Run 두 상태를 만들고, 이동 상태 안에서 걷기와 달리기를 Blend Space로 섞어봅시다.
이 예시는 대부분의 캐릭터 애니메이션 시스템의 기본이 됩니다.
필요한 에셋Idle애니메이션 시퀀스 (예:SKM_Mannequin_Idle)Walk_Run_BlendSpace(Blend Space 1D, 축:Speed, 포함 애니메이션:Walk,Run). 에셋 이름은 예시이며 캐릭터와 호환되는 스켈레톤을 사용합니다.
애님 블루프린트 열기: 여러분의 캐릭터 스켈레톤에 연결된 애님 블루프린트 (예: ABP_Mannequin)를 엽니다.
Event Blueprint Update Animation노드를 가져옵니다. 이 이벤트는 애니메이션 업데이트 때 호출됩니다. 업데이트 주기는 틱·최적화 설정에 따라 달라질 수 있습니다.Try Get Pawn Owner노드를 가져와 이 애니메이션 블루프린트를 사용하는 폰(Pawn, 즉 캐릭터)의 참조를 얻습니다.Try Get Pawn Owner의Return Value에서 드래그하여IsValid노드를 연결하여 폰이 유효한지 확인합니다.- 업데이트 이벤트의 실행 선을
IsValid에 연결하고Is Valid실행 출력 뒤에Cast To Character(또는Cast To BP_PlayerCharacter)를 둡니다. - 캐스팅 결과 객체 핀(
As Character)에서Get Velocity노드를 호출하여 현재 이동 속도를 얻습니다. - 지상 이동 예제이므로
Get Velocity의 출력에Vector Length XY를 연결하여 수직 속도를 제외한 속도를 계산합니다. - 이 속도 값을 저장할
Speed라는Float타입 변수를 애님 블루프린트에 추가하고,Set Speed노드를 연결하여 업데이트합니다. 캐스팅 성공 실행 출력도Set Speed의 실행 입력에 연결합니다. (Speed변수는 나중에 스테이트 머신의 전환 규칙과 블렌드 스페이스에서 사용됩니다.) - 컴파일 및 저장합니다.
- 애님 그래프 탭으로 이동합니다.
- 앞 절에서 추가한
Default State Machine이 최종 포즈에 연결되어 있는지 확인한 뒤 내부로 진입합니다. Entry노드에서Idle상태로 연결되는 선이 없다면,Entry노드에서 드래그하여Add State를 선택하고Idle이라는 상태를 만듭니다.Idle상태를 더블클릭하고 애니메이션 에셋을 드래그해 시퀀스 플레이어를 만든 뒤Output Pose에 연결합니다.Idle상태에서 드래그하여Add State를 선택하고Walk_Run이라는 상태를 만듭니다.Walk_Run상태를 더블클릭하여 내부로 진입합니다.Walk_Run_BlendSpace에셋을 상태 그래프에 드래그합니다.- 생성된 플레이어의
Speed입력에 애님 블루프린트의Speed변수(Get 노드)를 연결합니다. Output Pose노드에 연결합니다.
-
전환 규칙 설정
Idle에서Walk_Run으로 가는 전환 규칙 선을 더블클릭합니다.Can Enter Transition출력 핀에 연결될 로직을 만듭니다.Speed변수(Get 노드)를 가져와>(보다 큼) 노드를 연결하고,0.1과 비교합니다. (미세한 움직임에도 전환되지 않도록 작은 값을 사용)Walk_Run에서Idle로 가는 전환 규칙 선을 더블클릭합니다.Can Enter Transition출력 핀에 연결될 로직을 만듭니다.Speed변수(Get 노드)를 가져와<=(작거나 같음) 노드를 연결하고,0.1과 비교합니다. 이 예제는 같은 경계값으로 양쪽을 나누며, 떨림을 줄일 때는 진입·복귀 임계값을 서로 다르게 둘 수 있습니다.
- 컴파일 및 저장합니다.
스테이트 머신은 상태보다 전환 규칙이 많아질 때 복잡해집니다.
조건을 짧게 나누고 우선순위를 점검하면 디버깅이 쉬워집니다.
스테이트 머신 활용 시 고려사항
- 상태 전환 블렌딩: 스테이트 머신은 기본적으로 상태 전환 시 두 애니메이션을 부드럽게 블렌딩합니다. 전환 규칙 선을 선택하고 디테일 패널에서
Transition Duration(전환 시간),Blend Mode,Blend Curve등을 조절하여 블렌딩 방식을 세밀하게 제어할 수 있습니다. - 전환 우선순위: 여러 전환 규칙이 동시에 충족될 수 있는 경우,
Transition Priority Order의 숫자가 낮은 전환이 우선합니다. 생성 순서에 의존하지 말고 값을 확인하거나,Conduit노드를 사용하여 전환 로직을 단순화할 수 있습니다. - 콘딧 (Conduit): 여러 상태가 공통된 전환 규칙을 가질 때, 이 규칙을 한곳에 모아 관리할 수 있는 노드입니다. 스테이트 머신 그래프를 깔끔하게 유지하는 데 도움을 줍니다.
- 캐시 포즈 (Cached Pose): 동일한 애니메이션 포즈를 여러 상태나 블렌딩 로직에서 재사용해야 할 때, 해당 포즈를 캐시 포즈로 저장해두고 여러 곳에서 불러와 사용하면 성능 최적화와 가독성 향상에 도움이 됩니다.
- 애님 노티파이 (Anim Notify): 애니메이션 재생 중 특정 프레임에서 이벤트를 발생시키는 기능입니다. (예: 발소리 재생, 무기 타격 지점 설정 등) 이는 애님 블루프린트의 이벤트 그래프에서 수신하여 게임플레이 로직을 트리거할 수 있습니다.
스테이트 머신은 캐릭터 애니메이션 흐름을 상태와 전환 규칙으로 나눠 관리하는 방식입니다.
이동, 점프, 공격처럼 조건이 분명한 애니메이션 전환에 자주 사용됩니다.