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

All of the states for Henry’s left hand. Each layer has a purpose and a clear hierarchy. It makes it easy to control and easy to find state.

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

State machine behaviors are bits of code that you can attach to any animation state. You use them to tie behavior directly to the state of the animator itself.

Avoid writing complex gameplay code inside of them because it can get difficult to track down where your changes in the state are coming from. If you are using state machine behavior to drive gameplay code, use a messaging system; talk to a manager class, or trigger your code off of parameters at a higher level.

Finally, my favorite state machine behavior: Debug.Break();. It’s the most useful state machine behavior; you can attach anywhere in your animation setup, and you’ll have a breakpoint, similar to that of a visual scripting system.

Don’t be afraid to use C# code where appropriate. Rather than have hundreds or thousands of transitions, or hooking up AnyState transitions all over the place, use Animator.Play or Animator.CrossFade to dynamically cause direct transitions from code. If that still isn’t enough control, you can look into our PlayablesAPI for even more ways to animate using code. Examples can be found at 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
Eu entendi

Usamos cookies para garantir a melhor experiência no nosso site. Visite nossa página da política de cookies para obter mais informações.