'Espere, mudei de ideia' - Interrupções de transição de máquina de estado

Então, vamos nos aprofundar em alguns detalhes intrincados das transições e interrupções da máquina de estado!
Por padrão, no sistema de animação, as transições não podem ser interrompidas: quando você começa a passar de um estado para outro, não há como sair. Como um passageiro em um voo transatlântico, você está confortavelmente aninhado em seu assento até chegar ao seu destino e não pode mudar de ideia. Para a maioria dos usuários, isso é bom.
Mas se você precisar de mais controle sobre as transições, o Mecanim pode ser configurado de várias maneiras para atender às suas necessidades. Se não estiver satisfeito com o seu destino atual, você pode subir no assento do piloto e mudar os planos no meio do voo. Isso significa animações mais responsivas, mas também muitas oportunidades de se perder na complexidade.
Portanto, vamos examinar alguns exemplos para esclarecer isso. Podemos começar com uma máquina de estado bastante simples com quatro estados, rotulados de A a D, e acionadores conectados a cada transição na máquina de estado.

Por padrão, quando acionamos a transição A->B, nossa máquina de estado faz a transição para B e nada pode impedi-la de chegar ao seu destino. Mas se formos para o inspetor de transição A->B e alterarmos a fonte de interrupção de "None" (Nenhum) para "Current State" (Estado atual), nossa jornada de A para B poderá ser interrompida por alguns acionadores no estado A.

Por que apenas "alguns"? Porque a caixa de seleção "Ordered Interruption" (Interrupção ordenada) também está marcada por padrão. Isso significa que somente as transições no estado A que têm prioridade mais alta do que a atual são permitidas. Observando o inspetor do estado A, podemos ver que isso só se aplica à transição A->C.

Portanto, se ativarmos o acionador A->B e, logo após, o acionador A->D, nossa transição permanecerá ininterrupta. No entanto, se, em vez disso, pressionarmos o acionador A->C, a transição será imediatamente interrompida e a máquina de estado começará a fazer a transição para C.
Internamente, o sistema de animação registra a pose no momento da interrupção e agora mescla essa pose estática (X) com a nova animação de destino. Por que uma pose estática, em vez de uma mistura possivelmente mais suave entre a transição atual e a nova? Em poucas palavras: desempenho. Quando um jogo enfrenta uma cascata de interrupções, manter o controle de várias transições dinâmicas que ocorrem simultaneamente tornaria o sistema de animação rapidamente inescalável.
Agora, se desmarcarmos a caixa de seleção "Interrupção ordenada", tanto A->C quanto A->D poderão interromper a transição. No entanto, se ambos forem acionados no mesmo quadro, A->C ainda terá precedência porque tem uma prioridade mais alta.
Se mudarmos a fonte de interrupção para "Next State", A->C e A->D não poderão mais interromper a transição, independentemente de sua ordem. Entretanto, se pressionarmos o acionador B->D, começaremos imediatamente a transição de A para D, sem concluir a transição para B.
A ordem de transição também é importante no estado B. A caixa de seleção "Ordered Interruption" (Interrupção ordenada) não está mais disponível (qualquer transição acionada em B pode interromper a transição porque não tem uma classificação de prioridade em relação a A->B), mas a ordem das transições em B determinará qual transição vencerá se ambas forem acionadas no mesmo quadro. Nesse caso, se B->D e B->C forem acionados no mesmo quadro, B->D será selecionado.

Por fim, para obter controle total, podemos definir a fonte de interrupção como "Current State Then Next State" ou "Next State Then Current State". Nesse caso, as transições serão analisadas independentemente em um estado e depois no outro.
Então, vamos supor que temos a seguinte configuração.

Durante a transição A->B, um jogador muito animado aciona quatro transições no mesmo quadro: A->C, A->D, B->C e B->D. O que acontece?
Primeiro, "Ordered Interruption" (Interrupção ordenada) está marcada, portanto, podemos ignorar A->D imediatamente: ela tem prioridade mais baixa do que A->B. O estado atual é resolvido primeiro, portanto, não precisamos nem olhar para o estado B para saber que a transição A->C venceu.

