O que você está procurando?
Hero background image

Dicas para construir controladores de animador no Unity

Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Crie controladores de animador para seus personagens como você faria com um script – para que sejam simples o suficiente para reutilizar, suportar e depurar ao longo do ciclo de desenvolvimento.

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

Imagem da Árvore de Mistura

Oculte a complexidade em Árvores de Mistura

As Árvores de Mistura são ótimas para ocultar complexidade. Uma Árvore de Mistura não tem estado, pois não chama de volta para o código. Ela mistura entre os diferentes clipes com base nos parâmetros que você define.

A importância disso é que você pode iterar em Árvores de Mistura sem se preocupar em quebrar o resto do seu jogo. Você pode ocultar uma teia complexa de estados e evitar bugs no futuro porque não pode vincular o comportamento à maioria das animações em uma Árvore de Mistura.

Estados do animador

Pense em camadas como uma classe de script

Ajuda pensar em camadas como uma classe em um script. Você quer que tudo em uma camada sirva tanto à mesma função lógica quanto comportamental. Isso ocorre porque cada camada individual controla quais outras camadas ela substitui - se afeta ou não certos ossos, se essa camada é aditiva, e assim por diante.

Reutilize padrões

Padrões lógicos e reutilizáveis em máquinas de estado e subestado aceleram o desenvolvimento, facilitam a depuração e podem reduzir bugs, tudo isso permitindo 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 hub e spoke

Hub e spoke

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

Spokes são candidatos sólidos para criar máquinas de subestado usando os seguintes padrões.

Animadores de entrada e saída

Padrão de entrada compartilhada/saída compartilhada

Agrupando estados em um padrão de "intro" - execução/loop - "outro", você pode anexar de forma limpa quaisquer Eventos de Animação ou Comportamentos de Máquina de Estado aos estados de intro e outro. Assim como uma Árvore de Mistura, você pode iterar e mudar os estados internos de execução/loop sem se preocupar em quebrar seu jogo.

Padrão de seção e settle

Padrão de seção crítica e estabilização

Para animações interrompíveis, especialmente animações impulsionadas por entrada do jogador, divida seu clipe em duas partes. Primeiro, mantenha uma seção crítica que contenha todas as mudanças de estado, efeitos e danos que devem sempre ser executados até a conclusão. Em segundo lugar, crie uma animação de settle que pareça boa ao voltar ao estado ocioso e que possa ser interrompida por novas entradas.

Uma vez que suas animações se comportem e apareçam como desejado, você precisa retroalimentar o estado de seus animadores no estado do seu jogo. Veja as seções a seguir para alguns pontos-chave a serem lembrados.

Não escreva código complexo dentro dos Comportamentos da Máquina de Estados

Comportamentos de Máquina de Estado são trechos de código que você pode anexar a qualquer Estado de Animação. Use-os para vincular comportamentos diretamente ao estado do animador em si.

Evite escrever código de jogabilidade complexo dentro deles, pois pode ser difícil rastrear de onde estão vindo suas mudanças de estado. Se você estiver usando Comportamento de Máquina de Estado para conduzir código de jogabilidade, aproveite um sistema de mensagens; converse com uma classe gerenciadora 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 na 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# onde apropriado. Em vez de gerenciar centenas ou milhares de transições, ou conectar transições de AnyState por toda parte, use Animator.Play ou Animator.CrossFade para criar transições diretas dinamicamente a partir do código. Se isso ainda não for controle suficiente para você, veja a API Playables do Unity para mais maneiras de animar usando código. Alguns exemplos podem ser encontrados aqui.

Comportamentos de Máquina de Estado

Use Comportamentos da Máquina de Estados para garantir que os Eventos de Animação sempre sejam acionados

Eventos de Animação vinculam um momento específico do seu Clip de Animação a uma mudança específica de estado no seu jogo. Eles podem ser usados para acionar elementos como efeitos visuais e sonoros. No entanto, se você transitar para fora de um clip antes que ele seja acionado, então ele nunca será acionado. Uma maneira de resolver isso é adicionar um Comportamento de Máquina de Estado que garante que o evento sempre seja acionado quando um ponto específico no tempo for alcançado, não importa o que mais aconteça (ou não aconteça) no jogo.

Mais recursos