'잠깐, 마음이 바뀌었어' - 상태 머신 전환 중단

이제 상태 머신 전환과 중단에 대한 복잡한 세부 사항을 자세히 알아보겠습니다!
애니메이션 시스템에서는 기본적으로 전환을 중단할 수 없으며, 한 상태에서 다른 상태로 이동하기 시작하면 빠져나갈 방법이 없습니다. 대서양 횡단 비행기의 승객처럼 목적지에 도착할 때까지 편안하게 좌석에 앉아 마음을 바꿀 수 없습니다. 대부분의 사용자에게는 이 정도면 괜찮습니다.
하지만 전환에 대한 더 많은 제어가 필요한 경우, 필요에 따라 다양한 방식으로 Mecanim을 구성할 수 있습니다. 현재 목적지가 마음에 들지 않으면 조종석에 탑승하여 비행 도중에 계획을 변경할 수 있습니다. 이는 애니메이션의 반응성이 높아진다는 의미이기도 하지만, 복잡성 속에서 길을 잃을 기회가 많다는 의미이기도 합니다.
몇 가지 예를 통해 이를 정리해 보겠습니다. A부터 D까지 4개의 상태와 상태 머신의 모든 전환에 연결된 트리거가 있는 매우 간단한 상태 머신으로 시작할 수 있습니다.

기본적으로 A->B 전환을 트리거하면 상태 머신은 B로 전환되며, 그 어떤 것도 목적지에 도달하는 것을 막을 수 없습니다. 그러나 A->B 전환 검사기에서 중단 소스를 '없음'에서 '현재 상태'로 변경하면 상태 A의 일부 트리거에 의해 A에서 B로의 여정이 중단될 수 있습니다.

왜 "일부"만인가요? '정렬된 중단' 확인란도 기본적으로 선택되어 있기 때문입니다. 즉, 현재 상태보다 우선 순위가 높은 상태 A의 전환만 허용됩니다. 상태 A의 인스펙터를 보면, 이는 A->C 전환에만 적용된다는 것을 알 수 있습니다.

따라서 A->B 트리거를 활성화하면 A->D 트리거 직후에도 전환이 중단되지 않습니다. 그러나 대신 A->C 트리거를 누르면 전환이 즉시 중단되고 상태 머신이 C로 전환되기 시작합니다.
내부적으로 애니메이션 시스템은 중단 시점의 포즈를 기록하고, 이제 해당 정적 포즈(X)와 새 대상 애니메이션을 블렌딩합니다. 왜 현재와 새로운 전환을 더 매끄럽게 혼합하는 대신 정적인 포즈를 취해야 할까요? 간단히 말해서 성능입니다. 게임에서 연쇄적인 중단이 발생하는 경우, 여러 동적 전환을 동시에 추적하면 애니메이션 시스템을 확장할 수 없게 됩니다.
이제 '정렬된 중단' 확인란을 선택 취소하면 A->C와 A->D 모두 전환을 중단할 수 있습니다. 그러나 동일한 프레임에서 둘 다 트리거되는 경우 우선순위가 더 높은 A->C가 여전히 우선합니다.
중단 소스를 "다음 상태"로 변경하면 A->C 및 A->D는 순서에 관계없이 더 이상 전환을 중단할 수 없습니다. 그러나 B->D 트리거를 누르면 B로 전환을 완료하지 않고 즉시 A에서 D로 전환이 시작됩니다.
상태 B에서도 전환 순서가 중요합니다. '순서대로 중단' 확인란은 더 이상 사용할 수 없지만(B에서 트리거된 전환은 A->B에 비해 우선 순위가 없으므로 전환을 중단할 수 있음), 같은 프레임 내에서 두 전환이 모두 트리거된 경우 B의 전환 순서에 따라 어떤 전환이 승리하는지 결정됩니다. 이 경우 같은 프레임에서 B->D와 B->C가 트리거되면 B->D가 선택됩니다.

마지막으로 완벽한 제어를 위해 인터럽트 소스를 "현재 상태 다음 상태" 또는 "다음 상태 다음 현재 상태"로 설정할 수 있습니다. 이 경우 전환은 한 상태에서 독립적으로 분석된 다음 다른 상태에서 분석됩니다.
따라서 다음과 같은 구성이 있다고 가정해 보겠습니다.

A->B 전환 중에 매우 흥분한 플레이어는 같은 프레임 내에서 네 번의 전환을 트리거합니다: A->C, A->D, B->C 및 B->D. 어떻게 되나요?
먼저, '정렬된 중단'이 체크되어 있으므로 A->B보다 우선 순위가 낮은 A->D를 바로 무시할 수 있습니다. 현재 상태가 먼저 해결되므로 상태 B를 보지 않아도 전환 A->C가 승리한다는 것을 알 수 있습니다.

