O que você está procurando?
Hero background image
Dicas para criar controladores de animadores no Unity

Crie controladores de animação para seus personagens como se fosse um script, para que sejam simples o suficiente para serem reutilizados, suportados e depurados durante todo o ciclo de desenvolvimento.

Todas as capturas de tela abaixo são da animação do personagem Henry em Firewatch da Campo Santo.

Imagem da árvore de mesclagem
Ocultar complexidade em Blend Trees

As Blend Trees são ótimas para ocultar a complexidade. Uma Blend Tree não tem estado, pois não faz chamadas de volta para o código. Ele mescla os diferentes clipes com base nos parâmetros que você define.

A importância disso é que você pode iterar as Blend Trees sem se preocupar em quebrar o resto do jogo. Você pode ocultar uma rede complexa de estados e evitar bugs no futuro, pois não é possível vincular o comportamento à maioria das animações em uma Blend Tree.

Estados do animador
Pense nas camadas como uma classe de script

É útil pensar nas camadas como uma classe em um script. Você deseja que tudo em uma camada tenha a mesma função lógica e comportamental. Isso ocorre porque cada camada individual controla quais outras camadas ela substitui - se afeta ou não determinados ossos, se essa camada é aditiva e assim por diante.

Padrões de reutilização

Padrões lógicos reutilizáveis em máquinas de estado e de subestado aceleram o desenvolvimento, facilitam a depuração e podem reduzir os bugs, além de permitir que várias pessoas criem conteúdo semelhante.

As seções a seguir apresentam padrões que são úteis para estruturar suas camadas.

Animadores de centro e raio
Cubo e raio

Esse padrão facilita a depuração, pois você pode ver claramente as transições saindo e voltando para o estado vazio. Cada raio do hub deve redefinir qualquer estado em que tocar.

Os raios são candidatos sólidos para a fabricação de máquinas de substrato usando os seguintes padrões.

Animadores de entrada e saída
Padrão compartilhado de entrada/saída

Ao agrupar os estados em um padrão de "introdução" - execução/loop - "outro", você pode anexar de forma limpa qualquer evento de animação ou comportamento de máquina de estado aos estados de introdução e outro. De forma semelhante a uma Blend Tree, você pode iterar e alterar os estados internos de execução/loop sem se preocupar em interromper o jogo.

Padrão de seção e assentamento
Seção crítica e padrão de assentamento

Para animações que podem ser interrompidas, especialmente animações acionadas por entradas do jogador, divida o clipe em duas partes. Primeiro, mantenha uma seção crítica que contenha todas as alterações de estado, efeitos e danos que sempre devem ser executados até a conclusão. Em segundo lugar, crie uma animação de assentamento que pareça boa para que você volte ao modo inativo e que possa ser interrompida por novas entradas.

Depois que as animações se comportarem e aparecerem como desejado, você precisará alimentar o estado dos animadores com o estado do jogo. Consulte as seções a seguir para ver alguns pontos importantes a serem considerados.

Não escreva código complexo dentro de comportamentos de máquina de estado

Os comportamentos da máquina de estado são partes de código que você pode anexar a qualquer estado de animação. Use-os para vincular os comportamentos diretamente ao estado do próprio animador.

Evite escrever códigos complexos de jogabilidade dentro deles, pois pode ser difícil rastrear a origem das alterações no estado. Se estiver usando o comportamento da máquina de estado para conduzir o código de jogabilidade, aproveite um sistema de mensagens, converse com uma classe de gerenciador ou acione seu código a partir de parâmetros em um nível mais alto.

Debug.Break() é um dos comportamentos de máquina de estado mais eficazes que você pode usar. Anexe-o em qualquer lugar em sua configuração de animação e você terá um ponto de interrupção semelhante ao de um sistema de script visual.

Use código C# quando apropriado. Em vez de gerenciar centenas ou milhares de transições ou conectar transições AnyState em todos os lugares, use Animator.Play ou Animator.CrossFade para criar dinamicamente transições diretas a partir do código. Se isso ainda não for controle suficiente para você, procure a API Playables do Unity para obter mais maneiras de animar usando código. Alguns exemplos podem ser encontrados aqui.

Comportamentos da máquina de estado
Use comportamentos de máquina de estado para garantir que os eventos de animação sempre sejam acionados

Os eventos de animação vinculam um momento específico do clipe de animação a uma mudança específica de estado no jogo. Eles podem ser usados para definir elementos como efeitos visuais e sonoros. No entanto, se você sair de um clipe antes de ele ser disparado, ele nunca será disparado. Uma maneira de resolver isso é adicionar um comportamento de máquina de estado que garanta que o evento sempre seja acionado quando um ponto específico no tempo for atingido, independentemente do que mais acontecer (ou não acontecer) no jogo.

Mais recursos
Este conteúdo foi útil?