Pesquisar em Unity

Cinco dicas para manter os controladores de animação agradáveis e ordenados

Last updated: December 2018

What you will get from this page: Will Armstrong’s five awesome tips for animator controllers. You’ll get tips for building animator controllers for your characters like you would a script: so they’re efficient to reuse, extend, support and debug, all the way through the development cycle.
All of the screenshots are from animation for the character Henry in Firewatch.

Ocultar complexidade em blend trees

Blend Trees servem para ocultar a complexidade. Uma Blend Tree não tem estado; não retorna para o código. Simplesmente combina entre os diferentes clipes em função dos parâmetros que você define.

Isto significa que você pode iterar em Blend Trees sem se preocupar em quebrar o resto do seu jogo . Você pode ocultar uma rede complexa de estados e evitar futuros erros, porque você não pode associar o comportamento à maioria das animações em uma Blend Tree.

unity-tidy-animators-locomotion-blend-tree

Parece complexo, mas esta Blend Tree de movimento manteve as coisas simples.

Quando você pensa "camadas", pense: "uma classe de script"

Isso ajuda a pensar em camadas como uma espécie de analogia a uma classe em um script. Você quer que cada elemento em uma camada sirva a mesma função lógica e comportamental. Isso ocorre porque cada camada controla suas camadas subordinadas, quer afete ou não a estrutura, quer esta camada seja aditiva, e assim por diante.

unity-tidy-animators-states

Todos os estados para a mão esquerda de Henry. Cada camada tem um propósito e uma hierarquia clara. O estado é, portanto, mais fácil de controlar e encontrar.

Reutilizar padrões

Os modelos lógicos reutilizáveis em máquinas de estados e sub-estados aceleram o desenvolvimento, permitem que várias pessoas criem conteúdo semelhante, facilitam a depuração e também reduzem os erros em geral.

Alguns modelos úteis para estruturar suas camadas:

  • Hub and spoke: este modelo simplifica a depuração, porque você pode ver claramente as transições sair e voltar ao estado vazio. Cada ponto de conexão (spoke) ao centro (hub) deve redefinir qualquer estado em que toca. Os spokes são bem adaptados em máquinas de sub-estados usando os modelos abaixo.

    unity-tidy-animators-hub-and-spoke

    Um modelo de hub e spoke usado para animar o braço direito de Henry.

  • Entrada/saída compartilhada: agrupando estados em um modelo 'intro' - 'execução’/loop' - 'outro', você pode conectar com quaisquer eventos de animação ou comportamento de máquina de estados aos estados 'intro' e 'outro'. Como em uma blend tree, você pode então iterar e mudar os estados internos de ‘execução / loop’ sem receio de afetar o seu jogo.

    unity-tidy-animators-entry-to-exit

    Entrada a Saída: Todos os estados da mão direita de Henry para segurar um livro; mais sub-estados com detalhes ocultos.

  • Seção crítica e solução: para animações interruptíveis, especialmente animações controladas pelo jogador, divida seu clipe em duas partes. Primeiro, uma seção crítica que inclui todas as mudanças de estado, efeitos, danos, etc., que devem ser sempre executadas integralmente. Segundo, uma animação de solução que se veja bem voltando ao estado inativo e que possa ser interrompido por uma nova entrada.

    unity-tidy-animators-critical-section-and-settle

    Uma vez que suas animações estão funcionando e se parece que você as quer, você deve informar o estado dos seus animadores ao estado do seu jogo. Aqui estão alguns bons pontos a ter em mente.

Não escreva código complexo no comportamento de máquinas de estado

Os comportamentos das máquinas de estados são fragmentos de código que você pode adicionar a qualquer estado de animação. Você os usa para ligar o comportamento diretamente ao estado do próprio animador.

Evite escrever códigos de jogabilidade complexos no interior, porque pode ser difícil rastrear a origem das mudanças no estado. Se você estiver usando o comportamento da máquina do estado para direcionar o código de jogabilidade, use um sistema de mensagens; fale com uma classe de administrador ou acione o código por parâmetros em um nível mais alto.

Finalmente, meu comportamento da máquina de estados favorito: Debug.Break();. É incrivelmente útil, você pode adicioná-lo em qualquer parte de sua configuração de animação e terá um ponto de interrupção, semelhante ao de um sistema de scripts visuais.

Não tenha medo de usar código em C# onde for apropriado. Em vez de ter centenas ou milhares de transições, ou associar transições AnyState em tudo, use Animator.Play ou Animator.CrossFade para causar transições diretas do código de maneira dinâmica. Se isso ainda não for controle suficiente, você pode procurar em PlayablesAPI para obter outra maneiras de animar usando código. Exemplos podem ser encontrados em https://docs.unity3d.com/Manual/Playables-Examples.html.

Use o comportamento da máquina de estados para garantir que um evento de animação seja ativado de forma confiável

Os eventos de animação vinculam um momento específico do seu clip de animação a uma determinada mudança de estado no seu jogo. Podem ser usados para ativar, por exemplo, efeitos visuais e sonoros. No entanto, se você mudar um clip antes da ativação, então ele nunca se ativará. Uma maneira de resolver isso é adicionar um comportamento de máquina de estados que garanta que o evento seja ativado sempre que se alcança um ponto específico no tempo, independentemente do que aconteça ou não aconteça no jogo.

unity-tidy-animators-state-machine

Mais recursos

Queremos saber! Você gostou deste conteúdo?

Sim, continue. Bem. Poderia ser melhor