스테이트 머신(State Machines) 은 재생할 수 있는 특정 애니메이션과 해당 애니메이션의 재생이 허용되는 시기를 정의하기 위해 애니메이션 블루프린트(Animation Blueprints) 에서 빌드할 수 있는 모듈형 시스템입니다. 주로 이 시스템 타입은 애니메이션을 유휴, 걷기, 달리기 및 점프 같은 캐릭터 무브먼트 스테이트와 서로 연관시키는 데 사용됩니다. 스테이트 머신을 사용하면 스테이트 를 생성하고, 그러한 스테이트에서 재생할 애니메이션을 정의하고, 다른 스테이트로 전환할 시기를 제어하는 다양한 타입의 트랜지션 을 생성할 수 있습니다. 이를 통해 지나치게 복잡한 애님 그래프(Anim Graph)를 사용하지 않고도 쉽게 복잡한 애니메이션 블렌딩을 생성할 수 있습니다.
이 문서에서는 애니메이션 블루프린트에서 스테이트 머신, 스테이트 및 트랜지션을 생성하고 사용하는 방법을 간략하게 살펴봅니다.
전제조건
- 스테이트 머신은 애니메이션 블루프린트 내에 생성되므로 애니메이션 블루프린트와 해당 인터페이스 사용 방법을 알고 있어야 합니다.
- 입력에 반응하는 스테이트를 빌드할 수 있도록 프로젝트에 무브먼트 컴포넌트가 있는 캐릭터가 포함되어 있어야 합니다. 그런 캐릭터가 없다면 3인칭 템플릿을 사용해도 됩니다.
생성 및 구성
스테이트 머신은 애님 그래프 내에서 생성됩니다. 스테이트 머신을 생성하려면 애님 그래프(Anim Graph) 를 우클릭하고 스테이트 머신(State Machines) > 새 스테이트 머신 추가(Add New State Machine) 를 선택합니다. 생성한 새 스테이트 머신을 Output Pose 에 연결합니다.

스테이트 머신은 애님 그래프 내의 서브그래프이므로 내 블루프린트(My Blueprint) 패널 내에서 스테이트 머신 그래프를 볼 수 있습니다. 이를 더블클릭하면 스테이트 머신이 열립니다.

애님 그래프에서 스테이트 머신 노드를 더블클릭해서 열 수도 있습니다.
엔트리 포인트
모든 스테이트 머신은 엔트리 포인트로 시작하며, 일반적으로 엔트리 포인트는 디폴트 스테이트 를 정의하는 데 사용됩니다. 가장 일반적인 로코모션 구성에서 디폴트 스테이트는 캐릭터 유휴 스테이트일 것입니다.
디폴트 스테이트를 생성하려면 Entry 출력 핀을 클릭하고 드래그한 다음 마우스를 놓으면 컨텍스트 메뉴가 표시됩니다. 스테이트 추가(Add State) 를 선택합니다. 그러면 새 스테이트가 생성되고 엔트리 출력에 연결되어 기본적으로 이 스테이트가 활성화됩니다.

스테이트
스테이트는 스테이트 머신 내에 구성된 서브섹션으로, 서로 정기적으로 트랜지션할 수 있습니다. 스테이트 자체에는 고유의 애님 그래프 레이어가 포함되어 있으며, 모든 종류의 애니메이션 로직을 포함할 수 있습니다. 예를 들어, 유휴 스테이트에는 캐릭터의 유휴 애니메이션만 포함될 수 있지만, 무기 스테이트에는 사격과 조준에 대한 추가 로직이 포함될 수 있습니다. 어떤 로직을 사용하든 스테이트의 목적은 해당 스테이트에 고유한 최종 애니메이션이나 포즈를 생성하는 것입니다.
스테이트 생성하기
스테이트는 다음 방법으로 생성할 수 있습니다.
-
스테이트 머신 그래프를 우클릭하고 스테이트 추가 를 선택합니다.
-
스테이트의 경계(또는 엔트리 출력)를 클릭하고 드래그한 다음 마우스를 놓고 스테이트 추가 를 선택합니다. 이렇게 하면 트랜지션을 통해 이전 스테이트와도 연결됩니다.
-
콘텐츠 브라우저(Content Browser) 또는 에셋 브라우저(Asset Browser) 에서 애니메이션 에셋(Animation Asset) 을 스테이트 머신 그래프로 드래그합니다. 이렇게 하면 해당 스테이트에 애니메이션이 추가되고 출력 포즈(Output Pose) 에도 연결됩니다.
스테이트 머신에는 필요한 만큼의 스테이트를 포함할 수 있으며, 이러한 스테이트는 스테이트 머신 아래 서브그래프로도 표시됩니다.

스테이트 편집하기
스테이트의 내부 작업을 확인하려면 내 블루프린트 패널에서 스테이트를 더블클릭하거나 스테이트 머신 그래프에서 노드 자체를 더블클릭하면 됩니다. 그러면 스테이트가 열립니다.

애님 그래프와 마찬가지로 스테이트에도 애니메이션 로직을 연결할 최종 Output Pose 노드가 포함됩니다. 해당 스테이트가 활성화되면, 이 로직이 실행됩니다. 다른 스테이트가 활성화되면, 이 로직은 더는 실행되지 않습니다. 이 유휴 스테이트 예시에서는 유휴 애니메이션이 Output Pose에 연결되어 있습니다. 이 스테이트가 활성화되면, 이 결과 애니메이션이 재생됩니다.

스테이트 프로퍼티
스테이트를 선택하면 디테일(Details) 패널에서 다음 프로퍼티를 보고 수정할 수 있습니다.

이름 | 설명 |
---|---|
이름(Name) | 선택한 스테이트 이름입니다. |
들어오는 스테이트 이벤트(커스텀 블루프린트 이벤트)(Entered State Event (Custom Blueprint Event)) | 커스텀 블루프린트 이벤트(Custom Blueprint Event) 필드에 사용된 이름으로 스켈레톤 노티파이를 생성합니다. 이 노티파이는 스테이트가 활성화되고 트랜지션이 시작되면 실행됩니다. 일반 스켈레톤 노티파이와 마찬가지로 애니메이션 블루프린트의 이벤트 그래프 에서 이를 생성하여 이벤트에 액세스할 수 있습니다. ![]() |
나가는 스테이트 이벤트(커스텀 블루프린트 이벤트)(Left State Event (Custom Blueprint Event)) | 커스텀 블루프린트 이벤트(Custom Blueprint Event) 필드에 사용된 이름으로 스켈레톤 노티파이(Skeleton Notify)를 생성합니다. 이 노티파이는 다른 스테이트로 블렌딩을 시작하면 실행됩니다. |
완전히 블렌딩된 스테이트 이벤트(커스텀 블루프린트 이벤트)(Fully Blended State Event (Custom Blueprint Event)) | 커스텀 블루프린트 이벤트(Custom Blueprint Event) 필드에 사용된 이름으로 스켈레톤 노티파이를 생성합니다. 이 노티파이는 이 스테이트가 완전히 블렌딩되면 실행됩니다. |
진입 시 항상 리셋(Always Reset on Entry) | 이 프로퍼티를 활성화 하면 이 스테이트 내의 모든 애니메이션이 디폴트 값으로 다시 초기화됩니다. 대부분의 경우 그 의미는 다음과 같습니다.
비활성화 하면 나갔다가 이 스테이트로 돌아올 경우 모든 애니메이션과 그 프로퍼티가 이전 재생 스테이트와 기타 프로퍼티를 유지합니다. 즉, 애니메이션이 '중단된 지점에서 다시 시작'됩니다. |
트랜지션
스테이트 머신의 구조를 정의하는 스테이트 간 링크인 트랜지션 을 생성하여 어떤 스테이트가 다른 스테이트와 블렌딩될 수 있는지를 제어할 수 있습니다.

트랜지션을 생성하려면 스테이트의 경계에서 다른 스테이트로 드래그합니다. 이 예시에서는 Idle 스테이트 가 Run 스테이트 와 양방향으로 연결되어 있는데, 이는 기본 로코모션 스테이트 머신의 일반적인 구성입니다. 트랜지션은 단방향이므로 두 스테이트를 서로 트랜지션하게 하려면 각 방향에 대한 트랜지션을 생성해야 합니다.

트랜지션 및 트랜지션 룰 에 대한 자세한 내용은 트랜지션 페이지를 참조하세요.
컨듀잇
일반 트랜지션은 스테이트 간의 일대일 트랜지션에 사용할 수 있지만, 컨듀잇(conduits) 은 일대다, 다대일 또는 다대다 트랜지션 생성에 사용할 수 있습니다. 이러한 특성 때문에 컨듀잇은 더 고급의 공유 가능한 트랜지션 리소스 역할을 합니다.
컨듀잇을 생성하려면 스테이트 머신 그래프를 우클릭하고 컨듀잇 추가(Add Conduit) 를 선택합니다.

여러 가지 방법으로 컨듀잇을 사용할 수 있습니다. 한 가지 예는 스테이트 머신의 엔트리 포인트를 분산하는 데 사용하는 것입니다. 그런 다음 컨듀잇에서 트랜지션을 사용하여 디폴트로 시작할 스테이트를 선택할 수 있습니다. 이 예시는 애니메이션 몽타주 같은 다른 애니메이션으로 덮어쓰는 경우 스테이트 머신을 다시 초기화할 때 유용할 수 있습니다.

위의 예시를 실행하려면 스테이트 머신 디테일 패널에서 컨듀잇 엔트리 스테이트 허용(Allow Conduit Entry States) 을 활성화해야 합니다.
컨듀잇에는 자체 트랜지션 룰이 포함되어 있으며, 컨듀잇 노드를 더블클릭하거나 내 블루프린트 패널에서 컨듀잇 그래프를 열어 확인할 수 있습니다. 기본적으로 컨듀잇 트랜지션 룰은 false를 반환합니다. 대부분의 경우, 트랜지션 시작 가능(Can Enter Transition) 을 활성화하고 컨듀잇의 개별 트랜지션 인과 트랜지션 아웃에 트랜지션 룰 로직을 생성하는 것이 좋습니다.

트랜지션 및 트랜지션 룰에 대한 자세한 내용은 트랜지션 룰 페이지를 참조하세요.
스테이트 에일리어스
많은 스테이트와 스테이트 간 트랜지션 방법이 있는 더 복잡한 스테이트 머신을 빌드할 때는 그래프를 개선하기 위해 스테이트 에일리어스 를 사용하는 것이 좋습니다. 스테이트 에일리어스는 바로가기 타입의 노드로, 스테이트 머신에 추가하여 라인을 더 간소화하고 트랜지션을 통합하고 그래프 가독성을 개선할 수 있습니다.
![]() |
![]() |
---|---|
에일리어스를 사용하지 않는 스테이트 머신 | 에일리어스를 사용하는 스테이트 머신 |
스테이트 에일리어스를 생성하려면 스테이트 머신 그래프를 우클릭하고 스테이트 에일리어스 추가(Add State Alias) 를 선택합니다.

스테이트 에일리어스는 트랜지션할 수 있는 스테이트를 정의한 다음 노멀 트랜지션 메서드를 사용하여 에일리어스를 다른 스테이트에 연결하는 방식으로 작동합니다. 스테이트 에일리어스 노드를 클릭하면 디테일 패널에서 다음과 같은 내용을 확인할 수 있습니다.
- 스테이트 머신 내의 각 스테이트가 프로퍼티로 나열됩니다. 해당 스테이트를 활성화하면, 그 스테이트는 에일리어스에서 다른 스테이트로 연결한 트랜지션 및 룰을 채택합니다. 즉, 여기서 에일리어스에 '포함되는' 스테이트를 정의합니다.
-
글로벌 에일리어스(Global Alias) 를 활성화하면 모든 스테이트가 에일리어스에 포함됩니다. 같은 행동을 일으키는 모든 나열된 스테이트를 활성화할 수도 있지만, 글로벌 에일리어스를 활성화하면 나중에 생성된 모든 새 스테이트도 포함됩니다.
글로벌 에일리어스는 인터랙션, 공격 또는 기타 비슷한 애니메이션 등, 단일 프레임 입력 및 기간이 한정적인 스테이트에서 제한적으로 사용하는 것이 가장 좋습니다. 길이가 무한한 스테이트에 대해 글로벌 에일리어스를 사용하려면 다른 스테이트가 항상 트랜지션되지 않도록 모든 다른 스테이트 트랜지션 간에 복잡한 추가 로직이 필요할 수 있습니다.

에일리어스 예시
이 다소 단순한 스테이트 머신 예시에서는 land 및 locomotion 스테이트가 jump 및 fall loop 스테이트 둘 다로 전환되어야 합니다. 총 네 개의 트랜지션을 사용하고 있으며, 트랜지션마다 자체 트랜지션 룰이 있습니다.

스테이트 에일리어스를 사용하여 이 그래프를 정리할 수 있습니다. 같은 효과를 달성하려면 다음을 수행하면 됩니다.
- 스테이트 에일리어스를 생성하고 fall loop 및 jump 스테이트 모두로 트랜지션합니다.
- 스테이트 에일리어스를 선택하고 locomotion 및 land 를 활성화합니다.

스테이트 에일리어스는 활성화된 모든 스테이트의 트랜지션을 통합하므로, 스테이트 에일리어스를 사용하면 이러한 스테이트가 동일한 트랜지션 룰과 프로퍼티를 공유하게 됩니다. 특정 트랜지션에 다른 룰이나 블렌드 기간, 기타 프로퍼티를 적용하려는 경우, 그러한 스테이트에 대한 고유 트랜지션을 생성해야 합니다.
스테이트 머신 프로퍼티
스테이트 머신의 디테일(Details) 패널에는 다음과 같은 프로퍼티가 있습니다.

이름 | 설명 |
---|---|
이름(Name) | 선택한 스테이트 머신의 이름입니다. |
프레임당 최대 트랜지션(Max Transitions Per Frame) | 이 숫자는 단일 프레임이나 틱에서 발생할 수 있는 트랜지션 또는 결정 수를 정의합니다. 스테이트 머신에 스테이트와 트랜지션이 많고 주어진 시간에 둘 이상의 트랜지션이 true가 될 수 있는 경우, 이 숫자를 1 로 설정하는 것이 좋습니다. 그러면 한 번에 하나의 결정만 이루어지므로 결정과 트랜지션의 경합이 방지됩니다. |
첫 업데이트 트랜지션 건너뛰기(Skip First Update Transition) | 스테이트 머신이 연관성을 가지게 되면, 엔트리 포인트에 연결된 디폴트 스테이트로 초기화됩니다. 해당 시점에서 일반 스테이트 머신 프로세스가 시작되고 모든 유효한 트랜지션이 수행됩니다.
이를 통해 원하는 경우 디폴트가 아닌 스테이트가 디폴트 스테이트인 것처럼 행동하게 할 수 있습니다. 예를 들어, 간단한 유휴(idle) 및 달리기(run) 스테이트 머신이 있는데 유휴(idle) 가 디폴트 스테이트이고 달리기(run) 로 트랜지션할 수 있는 경우입니다. 첫 업데이트 트랜지션 건너뛰기(Skip First Update Transition) 가 활성화되어 있고 스테이트 머신 초기화 시 달리기(run) 트랜지션 룰이 true 이면, 달리기(run)가 초기화되고 즉시 100%로 블렌딩됩니다. |
연관성이 생길 시 재초기화(Reinitialize on Becoming Relevant) | 이 프로퍼티를 활성화하면 스테이트 머신이 연관성을 가지게 될 때 첫 번째로 진입한 스테이트를 재초기화합니다. 이 세팅은 스테이트별 프로퍼티 진입 시 항상 리셋 과 비슷하게 작동하지만, 첫 번째로 진입하여 초기화된 스테이트만 리셋합니다. |
노티파이 메타 데이터 생성(Create Notify Meta Data) | 트랜지션 룰에서 애니메이션 노티파이 함수 사용 시, 이 프로퍼티를 활성화하면 모든 관련 데이터가 이러한 노티파이 함수로 전송될 수 있습니다. 이 프로퍼티를 비활성화하면, 어떠한 노티파이 함수도 작동하지 않습니다. |
컨듀잇 엔트리 스테이트 허용(Allow Conduit Entry States) | 이 프로퍼티를 활성화하면 컨듀잇을 엔트리 스테이트로 사용하여 컨듀잇의 트랜지션 룰에 따라 다양한 디폴트 스테이트를 허용할 수 있습니다. |