상태 기계는 애니메이션 노드를 대기, 걷기, 달리기, 점프와 같은 이름이 있는 상태로 결합합니다. 활성 상태를 재생하고 전환 조건이 true로 평가될 때 다른 상태로 혼합합니다. 상태 기계를 사용하여 전환 논리를 Luau로 작성하지 않고도 어떤 애니메이션이 서로를 따를 수 있는지를 정의합니다.
각 상태는 상태 기계의 입력에 연결됩니다. 상태는 클립, 블렌드 노드 또는 다른 상태 기계일 수 있습니다. 상태 기계는 활성 애니메이션 포즈 또는 전환 중일 경우 두 포즈 간의 혼합을 출력하며, 이를 그래프의 다음 노드에 연결합니다.
전제 조건
상태 기계를 만들기 전에 애니메이션 그래프 편집기에 익숙해지세요. 여기에는 그래프를 열고 애니메이션 그래프를 만드는 방법이 포함됩니다.
상태 기계 만들기
다음 예제는 JumpFallLandRunExample의 세 가지 상태인 Locomotion, Fall, LandIdle을 사용합니다. 캐릭터는 정상적으로 이동하고 공중에 있을 때 낙하 애니메이션으로 전환하며, 착지하기 전에 착지 애니메이션을 재생합니다. 이 단계는 상태 기계에 중점을 두며, 이동, 낙하 및 착지를 위한 애니메이션 노드로 시작합니다.
그래프 편집기에서 마우스 오른쪽 버튼을 클릭하고 노드 삽입 ⟩ 상태 기계를 선택합니다.

상태 기계 노드에서 열기를 클릭합니다. 상태 기계 보기에서 상태 만들기를 사용하여 Locomotion, Fall, LandIdle이라는 세 가지 상태를 추가합니다.

그래프로 돌아가서 애니메이션 노드를 해당 상태 기계 입력에 연결합니다:
- Locomotion: 이동 애니메이션을 연결합니다. 참조 그래프는 Blend1DNode라는 IdleRunBlend를 사용하여 Speed에 따라 대기 및 달리기 애니메이션을 혼합합니다.
- Fall: 낙하 ClipNode를 연결하고 재생 모드를 Enum.AnimationNodePlayMode|OnceAndHold로 설정하여 캐릭터가 착지할 때까지 최종 포즈를 유지합니다.
- LandIdle: 착지 클립을 연결하고 재생 모드를 Enum.AnimationNodePlayMode|OnceAndHold로 설정하여 완료된 후 다시 이동으로 전환할 수 있도록 합니다.
상태 기계 출력을 그래프 출력의 포즈 입력에 연결합니다.

상태 기계 보기를 다시 열고 **(진입)**에서 Locomotion으로 전환을 드래그합니다. 그래프가 시작될 때 상태 기계는 이 상태에서 시작합니다.

Grounded라는 부울 그래프 매개변수를 추가하고 true로 설정합니다. 이 매개변수는 캐릭터가 지면에 있는지를 나타냅니다.
다음 전환을 추가합니다. 소스 상태에서 대상 상태로 연결을 드래그한 다음 각 전환을 구성합니다:
- Locomotion에서 Fall로: 기다리기를 표현식로 설정하고, 표현식을 not Grounded로, 길이를 0.2초로 설정합니다. 캐릭터가 지면을 떠날 때 낙하 애니메이션이 시작됩니다.
- Fall에서 LandIdle로: 기다리기를 표현식으로 설정하고, 표현식을 Grounded로, 길이를 0.1초로 설정합니다. 캐릭터가 지면에 닿을 때 착지 애니메이션이 시작됩니다.
- LandIdle에서 Locomotion으로: 기다리기를 완료됨으로 설정하고, 언제를 Enum.AnimationNodeTransitionWhen|BeforeFinished로, 길이를 0.2초로 설정합니다. 상태 기계는 착지 애니메이션의 마지막 0.2초 동안 다시 이동으로 혼합하기 시작합니다.

모든 세 가지 전환에 대해 곡선을 기본값(Linear)으로 둡니다. 그래프를 미리 보고 Grounded를 false로 변경하여 Fall로 들어간 다음, 다시 true로 변경하여 LandIdle을 재생하고 Locomotion으로 돌아갑니다.
캐릭터가 지면을 떠나고 닿을 때 게임 플레이 코드에서 Grounded를 업데이트합니다. 이동 혼합이 Speed를 사용하는 경우, 캐릭터가 이동할 때 해당 매개변수를 업데이트합니다. 매개변수 워크플로우에 대한 내용은 API 통합을 참조하세요.
점프 및 추가 착지 상태로 상태 기계를 확장하여 전체 이동 그래프를 만듭니다. JumpFallLandRunExample에는 서 있는 상태와 달리는 상태에 대한 별도의 점프와 이동 및 낙하 속도에 따라 다른 착지가 포함되어 있습니다.
상태 기계 속성
상태 기계 노드 속성
- 입력
- State1...StateN: 각 상태를 정의하는 애니메이션 노드. 상태의 이름은 상태 기계 노드의 입력 이름과 일치해야 합니다.
- 속성
속성 유형 설명 EntryState ObjectValue 그래프가 시작될 때 활성 상태를 위한 AnimationNodeDefinition을 가리키는 ObjectValue입니다. - 이벤트 데이터
- 이벤트 처리: 활성 상태의 이벤트는 가중치가 변경되지 않고 통과합니다.
- 이벤트 방출: 활성 상태의 이벤트만 통과합니다. 전환 중에는 이벤트 방출이 전역 이벤트 규칙을 따릅니다.
전환 속성
전환은 하나 이상의 소스 상태, 대상 상태 및 조건을 가집니다. 활성 상태가 소스 상태와 일치하면 상태 기계는 조건을 확인합니다. 조건이 true로 평가되면 대상 상태로 혼합합니다.
기다리기는 전환 조건 UI를 결정합니다. 표현식 (Enum.AnimationNodeWaitFor|Trigger)를 선택하면 표현식 상자가 표시됩니다. 표현식은 ShouldJump와 같은 부울 그래프 매개변수를 직접 참조하거나 Speed >= 12와 같은 조건을 평가할 수 있습니다. 완료됨 (Enum.AnimationNodeWaitFor|Finished)을 선택하면 언제 드롭다운이 표시됩니다.
하나 이상의 전환이 true인 표현식을 가진 경우, 상태 기계는 가장 높은 우선 순위 값을 가진 전환을 먼저 평가합니다. 우선 순위가 동일하면 무작위로 하나의 전환을 선택합니다. 경쟁하는 전환에 서로 다른 우선 순위를 할당하여 결과를 예측 가능하게 만듭니다.
| 속성 | 유형 | 설명 |
|---|---|---|
| From | ObjectValue | 전환을 시작할 수 있는 상태에 대한 AnimationNodeDefinition을 가리키는 ObjectValue입니다. (모든) 전환의 경우 이 속성을 설정하지 않습니다. |
| To | ObjectValue | 대상 상태에 대한 AnimationNodeDefinition을 가리키는 ObjectValue입니다. |
| WaitFor | Enum.AnimationNodeWaitFor | 어떤 전환 조건 UI가 표시되는지를 결정합니다. Enum.AnimationNodeWaitFor|Trigger는 표현식 상자를 표시합니다. Enum.AnimationNodeWaitFor|Finished는 언제 드롭다운을 표시합니다. |
| When | Enum.AnimationNodeTransitionWhen | 기다리기가 완료됨일 때 사용 가능합니다. Enum.AnimationNodeTransitionWhen|Finished를 선택하면 소스 상태가 완료된 후 시작되며, Enum.AnimationNodeTransitionWhen|BeforeFinished를 선택하면 소스 상태가 완료되기 1초 전에 혼합을 시작합니다. |
| Expression | 문자열 | 기다리기가 표현식일 때 사용 가능합니다. true로 평가될 때 전환을 시작하는 부울 그래프 매개변수 또는 표현식입니다. 지원되는 내용은 표현식을 참조하세요. |
| Priority | 숫자 | 하나 이상의 표현식이 true일 때 사용되는 순서입니다. 높은 값이 우선합니다. 유효한 값은 0에서 65,535까지입니다. |
| Duration | 숫자 | 대상 상태로 혼합하는 데 걸리는 시간(초)입니다. 기본값은 0.15초입니다. |
| Curve | Enum.PoseEasingStyle | 혼합 중에 사용되는 이징입니다. Linear 및 CubicV2만 지원됩니다. 기본값은 Linear입니다. |