스테이트 머신 개요

State Machine, 스테이트 머신 작동 방식 및 그 내부에 사용되는 핵심 시스템에 대한 분석입니다.

Choose your operating system:

Windows

macOS

Linux

애니메이션 State Machines (스테이트 머신)을 통해 애니메이션 블루프린트 를 보다 모듈식으로 작업할 수 있습니다. 사용자는 캐릭터나 스켈레탈 메시가 있을 수 있는 다양한 일련의 상태를 정의합니다. 다음, 그 캐릭터나 스켈레탈 메시가 각각의 상태에 들어가고 나가는 상황을, 흐름도와 비슷한 방식으로 정의합니다.

예를 들어, 다음과 같은 모습의 캐릭터 애니메이션 프로세스를 정의하는 흐름도가 있을 수 있습니다:

AnimationFlowChart.png

위 흐름도에 대한 스테이트 머신을 구성하한다면, 다음과 같을 것입니다:

StateMachine.png

스테이트 머신 해부도

스테이트 머신은 주로 여러가지 스테이트(상태), 그 스테이트로 드나드는 트랜지션(전환), 그 상황을 정의하는 룰(규칙) 등의 망으로 이루어집니다. 각 스테이트는 각각의 룰 세트와 함께, 응축되어 독립된 블루프린트 망으로 간주됩니다. 이로 인해 과도히 복잡한 애님 그래프 를 사용하지 않고도 매우 쉽게 복잡한 애니메이션 블렌딩이 가능합니다.

스테이트

개념적으로 스테이트란, 캐릭터나 스켈레탈 메시가 정기적으로 블렌딩하여 드나드는 애님 그래프의 조직화된 한 부분으로 생각하면 좋습니다. 그런 다음 그래프의 이 부분으로 트랜지션(전환)하여 드나들 수 있습니다. 예를 들어 캐릭터 애니메이션의 Idle (빈둥) 스테이트가 있고, 그 스테이트에는 애니메이션이 하나만 있을 수 있습니다.

그 스테이트 머신에서 볼 수 있는 Idle 스테이트는 다음과 같습니다.

State.png

그 스테이트에 더블클릭 하면 그래프가 열리는데, 여기서 최종 애니메이션 포즈 가 결정됩니다.

IdleStateInside.png

그러나 캐릭터가 이동을 시작하면, Movement (이동) 스테이트로 전환 가능한데, 이는 걷기나 달리기처럼 표면을 좌우로 이동하는 상태를 말합니다.

MoveState.png

이 스테이트에는 BlendSpace (블렌드스페이스)가 있을 수 있고, 거기서 캐릭터의 이동 속력과 방향을 정의할 수 있습니다.

MovementInside.png

스테이트 자체적으로는 핀이 없는데, 자유도가 높은 형태로 디자인되었기 때문입니다.

그 외부 테두리에서 선을 끌어 (블루프린트와 비슷하게) 스테이트를 연결하거나 새로운 스테이트를 만들 수 있습니다.

DragWire.png

트랜지션 룰

스테이트를 정의했으면, 스켈레탈 메시가 한 상태에서 다른 상태로 어떻게 전환되는지 제어할 수 있어야 하는데, 그 때 Transition Rule (트랜지션 룰, 전환 규칙)이 쓰입니다. 트랜지션 룰은 스테이트를 연결하는 와이어를 따라 자동 생성됩니다.

TransitionRule.png

트랜지션 룰은 True/False 값 출력을 위한 목적으로 변수 값에 대한 검사와 테스트를 몇 번이든 할 수 있습니다. 이 부울 출력값은 애니메이션이 그 트랜지션을 통해 전환할 수 있는지 없는지를 결정합니다.

TransitionRuleInside.png

위에서는 캐릭터의 Speed (속력) 값을 테스트했습니다. 값이 10 보다 커지면, 전환이 가능하도록 합니다. 이 경우 캐릭터는 Idle (빈둥) 상태에서 Movement (이동) 상태로 넘어갈 수 있는 것입니다. 그 후 빈둥 상태로 돌아올 때는 완전히 다른 규칙을 사용할 수 있습니다.

예를 들어 이동 상태에서 빈둥 상태로 돌아가는 트랜지션 룰이 다음과 같다 칩시다.

TransitionRuleReturn.png

이 안에서, 이동 상태로 전환하기 위해 테스트했던 동일한 값이 더이상 true 가 아닌지 검사합니다.

TransitionRuleReturnInside.png

컨듀잇

Conduits (도관, 컨듀잇)은 보다 고급의 공유가능 트랜지션 리소스 역할을 합니다. 트랜지션 룰은 한 상태에서 다른 상태로의 단순한 일대일 대응관계라면, 컨듀잇은 일대다, 다대일, 다대다 등이 가능합니다. 컨듀잇은 그래프상에 스테이트와 비슷하게 나타나지만, 컨듀잇 이름 앞에 있는 아이콘이 다릅니다 (아래).

ConduitNode.png

컨듀잇의 사용 예라면 캐릭터가 죽었을 때 재생할 수 있는 애니메이션이 여럿 있는 상황인 경우입니다.

캐릭터의 생명력이 0 이하이면 Death (사망) 상태로 전환되는 단순한 트랜지션 룰을 가지고 시작합니다. 그러나 그 트랜지션이 스테이트가 아니라 컨듀잇으로 이어지면, 플레이어의 사인(총상, 자상, 폭발상, 차에 치임, 모루에 깔림 등)에 대한 여러가지 검사를 거쳐 다양한 별개의 사망 스테이트로 분기시킬 수 있습니다.

그 그래프를 단순화시켜 보면 아래와 같을 것입니다:

ConduitGraph.png

그 안의 컨듀잇 그래프는 트랜지션 룰과 똑같아 보입니다:

ConduitInside.png

컨듀잇을 나가는 실제 트랜지션 룰은 그 후로 사인을 결정하여 적합한 상태로 블렌딩하도록 할 수 있습니다.

마우스 오버 프리뷰

스테이트 머신의 기능 중 하나로, 스테이트 머신 또는 그 컴포넌트 노드 중 하나 위에 마우스 커서를 올렸을 때 바로 미리보기를 할 수 있습니다. 예를 들어 하나의 스테이트 머신에 마우스 커서를 올리면, 프리뷰 창이 떠 해당 스테이트 머신의 하이 레벨 뷰를 확인할 수 있습니다. 접힌 블루프린트 망과 비슷합니다.

StateMachineHoverPreview.png

이러한 프리뷰는 스테이트 머신 내 다양한 스테이트 및 트랜지션 룰에도 확장 적용됩니다. 그 위에 커서를 올리면 그 안에 있는 내용을 미리볼 수 있습니다.

IdleStatePreview.png

트랜지션 룰의 경우, 그 안의 노드 뿐만 아니라, 그 규칙에 대한 설명도 확인할 수 있습니다.

TransitionRulePreview.png

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기