Como usar interrupções no Unity Animator ao máximo



O efeito uau nos jogos pode ser alcançado não apenas por mecânicas inesperadas ou plotadoras, mas também por animação - em projetos para dispositivos móveis, o último geralmente tem uma ênfase especial. Portanto, decidi compartilhar uma tradução interessante de material no Unity Animator. Inside - sobre a prioridade das transições de animação e alternância competente entre estados.

O mecanismo de interrupção no Unity Animator quase não vale os tutoriais e a documentação; muitos simplesmente param de estudá-lo. Somente com a experiência entendi que padrões e sinais existem para usar uma interrupção.

O artigo está dividido em três partes:

  • No primeiro, vou lhe dizer o que são interrupções, quais tipos existem e qual a melhor forma de usá-las.
  • O segundo é sobre sinais que indicam a necessidade de interrupção. Dê uma olhada no Animator e veja como você pode substituir transições desnecessárias.
  • Na terceira, falaremos sobre como organizar o trabalho no Animator e impedir seu crescimento descontrolado. Isso é especialmente verdadeiro para equipes grandes, nas quais várias pessoas estão envolvidas no mesmo animador.



Parte 1: o que é uma "interrupção"?


A interrupção é um recurso do Unity Animator que permite interromper a transição da animação de um estado para outro para passar para o terceiro.

Essa é a única maneira que permite executar uma mistura de uma transição incompleta para o estado desejado. Com ele, você não depende de uma mudança acentuada de estado ou, pior ainda, de transições de Qualquer Estado. Explicarei com mais detalhes mais tarde.

Existem vários tipos básicos de interrupção:



Estado atual

Se várias transições forem fornecidas a partir de um determinado estado e outra for iniciada durante um deles, a alternância será realizada a partir do ponto atual, conforme mostrado no diagrama:



Próximo Estado

O próximo estado funciona de maneira semelhante ao estado atual. Mas aqui, o Animator analisará transições do próximo estado, enquanto a transição do estado atual ainda estiver em vigor.



Estado atual e próximo estado (primeiro, estado atual e depois próximo)

Em algum lugar por aqui, as pessoas ficam entediadas com a teoria e perdem o interesse pelo tópico. Espere! Isso levará sua habilidade com o Animator para um novo nível.

Depois de dominar o Estado Atual e o Próximo Estado, você definitivamente entenderá o terceiro tipo, porque é a combinação deles. Nele, o Animator analisará a transição atual quadro a quadro em busca de outros que possam ser executados a partir do estado inicial. Se não forem encontrados, o Animator analisará o próximo estado em busca de uma transição adequada. Ao mesmo tempo, alternando para uma nova transição no processo de execução da anterior, o Animator se comportará exatamente da mesma maneira que nos exemplos acima.

Próximo estado e estado atual (primeiro estado seguinte e atual)

Tudo é como no terceiro tipo, apenas a ordem de análise será inversa.

Interrupção ordenada



Para cada estado, a prioridade das transições (de cima para baixo) é definida da seguinte maneira:



Se antes você não sabia por que arrastar componentes nesta lista - pronto! Aqui você classifica a prioridade da transição.

Quando a interrupção ordenada é marcada, o Animator interrompe apenas se a prioridade da nova transição for maior que a prioridade da transição atualmente em andamento. E quanto maior a transição estiver localizada nesta lista, maior será sua prioridade.

Parte 2: como determinar onde quebrar


Ao trabalhar com interrupções, é mais difícil determinar exatamente quando usá-las. E, em algumas situações, elas são necessárias - com o tempo, você começa a perceber.

Considere o exemplo mais impressionante. Um padrão familiar?



Tudo se resume a qualquer estado. Certo?

Não.

Este é o primeiro sinal de que a maioria das suas transições é feita com interrupções. As transições de qualquer Estado têm direito à vida em casos especiais, mas a maioria das pessoas as usa quando realmente precisa (bem, você adivinhou) de interrupções.

Padrões de interrupção de estado atual:



Muitas vezes, qualquer estado é criado apenas para a transição para o segundo estado, quando o primeiro já foi iniciado. Esqueça. Use interrupções.

Outro exemplo: temos uma transição do FirstState para o SecondState, mas o Tempo de saída não está definido, o tempo de transição é 0 e uma condição é especificada. Idealmente, a interrupção resolverá esse problema. Você não pode recorrer a Qualquer estado, porque ele já foi usado com muita frequência e, adicionando-o ao SecondState, você ativa estados que não são necessários nesse caso.

Padrões de interrupção de estado seguinte:



Muitas vezes, há transições com tempo de saída completamente insano e condições de transição. Defina a interrupção corretamente e você alcançará mais facilmente o mesmo objetivo. Como você pode ver, geralmente é encontrado qualquer estado onde são necessárias interrupções.

Lembre-se de que você pode adicionar várias transições de dois estados idênticos para usar com êxito a interrupção.

Geralmente, todos os outros padrões são combinações dos exemplos descritos acima.

Situações típicas para interrupção:

Em algumas situações, as interrupções são a melhor saída. Um pouco de prática no Animator, e você pode aprender facilmente a percebê-las.

a) A próxima ação deve acionar imediatamente uma animação.

Isso geralmente acontece em jogos de ação em que há muitas informações e você precisa executar rapidamente as seguintes ações.

Por exemplo, as pessoas costumam usar transições Any State (ou múltiplas transições com configurações diferentes) para fazer a transição suave de um salto duplo para um empurrão.

É necessário mapear todas as ações possíveis, definir a duração dos eventos e adicioná-lo aos estados e transições. E, em seguida, defina interrupções para alternar corretamente de um evento para outro.

b) A animação começou, mas a situação mudou, e precisamos seguir para uma sequência diferente de animações.

Isso geralmente acontece com os UI Animators, nos quais você pode pular alguns itens de menu e os submenus podem ser exibidos sobre tudo o mais.

As pessoas geralmente adicionam vários animadores ao mesmo objeto e definem suas condições de ativação / desativação para pular uma animação e iniciar outra. Este é outro exemplo em que vale a pena usar interrupções.

c) Você precisa sair da cadeia de animação atual.

As interrupções podem ser conectadas entre si - você obtém uma sequência de interrupções que o levará a uma nova cadeia. Nesse caso, todos os estados serão concluídos corretamente e em tempo hábil. Aqui você pode usar as interrupções do Próximo Estado.

Parte 3: tudo no Animator deve ficar claro


Trabalhar com o Animator é um tipo especial de arte. Quanto mais prática, mais óbvio o progresso. Um fluxo de trabalho claro e consistente sempre tem um efeito positivo nos resultados.

Recomendações para evitar confusão no Animator:

  1. Use Sub-State Machines e tente contornar as transições para estados internos. A Máquina Subestado correta trabalha independentemente na entrada e na saída, usa transições que direcionam o fluxo para dentro e sabe o que fazer com o resultado. Dessa forma, você pode evitar problemas críticos ao trabalhar no Animator.
  2. Use Qualquer Estado o mínimo possível. Pense se isso é realmente necessário. Entre em contato com seus colegas. E somente se todos concordarem, use as transições Qualquer Estado.
  3. Se lhe parecer que o seu Animator deve parecer mais fácil do que agora - arrume-o. Esta é a melhor maneira de aprimorar suas habilidades.

Source: https://habr.com/ru/post/pt470499/


All Articles