O sistema de animação padrão da Unity é muito completo, e muito útil para nossos jogos.
Mas um dos maiores problemas para os iniciantes, é para gerenciar as transições entre animações no Animator.
Pois, conforme o projeto cresce, a “Teia de aranha” que se forma, fica complexa demais de se gerenciar.
Mas neste artigo vamos te ajudar com um sistema bem básico, que apesar de simples pode amenizar esse problema!
Obviamente que você precisará entender minimamente de programação na Unity, e não tem como mostrar toda uma lógica aqui.
Mas, sem dúvidas com pouco conhecimento você poderá adaptar e escalar esse sistema para se adaptar ao seu projeto.
Passo 1: Criando um Script
Crie um script com o nome PlayerAnimation, pois, ele será a classe responsável por gerenciar suas animações.
E em seguida, declare uma variável do tipo Animator, para armazenar o animator do seu objeto.
E obviamente, referencie no Awake ou Start essa variável dando um GetComponent, ou manualmente no seu inspector.
Passo 2: Defina um ID
Separe uma região do seu script para anotar e definir os IDs de cada animação do seu objeto.
E isso é apenas para organização mesmo, mas é importante para você ter controle conforme seu jogo aumentar o escopo.
E para isso use números inteiros, pois, a função que criaremos a seguir se baseará em números inteiros.
Mas, lembre que a contagem de ID se inicia em zero, ou seja, zero será, na verdade, sua primeira animação.
Passo 3: Função SetAnim
Agora crie uma função pública chamada SetAnim, e entre as chaves declare um parâmetro int animID.
Ou seja, sempre que essa função for chamada de outros Scripts, obrigatoriamente eles deverão passar um número inteiro.
Pois, será com base nesse número inteiro que daremos play na animação desejada correspondente.
Passo 4: Verificações
O primeiro comando agora a ser feito é declarar uma variável do tipo AnimatorStateInfo.
Pois, nela armazenaremos as informações da animação que está sendo executada atualmente.
Ou seja, fazendo ela receber GetCurrentAnimatorStateInfo(), do animator armazenado na variável anim, neste caso.
Passo 5: Ifs ou Case
Agora vamos construir a lógica que define a animação que será executada, podendo usar ifs ou um case.
Mas, aqui usaremos um if, para ficar o mais simples possível de todos entenderem.
E basta verificar se o animId recebido na chamada da função é igual a 0, que representa a primeira animação.
E caso seja, executaremos o que esta dentro desse if, se não for, a lógica seguirá para as próximas comparações abaixo.
Passo 6: Verificando a animação atual
É importante agora dentro desse if verificarmos se a animação que queremos executar já não esteja em execução.
Pois, caso ela esteja sendo executada já, não tem porque darmos um play nela novamente e quebramos o loop dela.
Por isso, verificamos se o nome da animação que esta executando atualmente não é igual a que queremos executar.
E dentro das aspas, precisamos colocar o nome da animação que você quer executar, escrevendo exatamente igual.
Passo 7: dar play na animação
Caso passe por todas as verificações, ai sim podemos dar play na animação desejada.
E que é correspondente ao ID definido anteriormente, usando o comando anim.Play(“”, int).
Mas, dois detalhes são importantes aqui: o nome passado deve ser idêntico e da mesma animação na verificação do if, e no play da animação.
E na variável int, sempre colocaremos -1, pois, se refere a layer de animação mais baixo.
E isso só muda, caso seu jogo trabalhe com animações que usem camadas de sprites diferentes, tipo sistema de Skins.
Passo 8: Replicar a lógica
Agora basta você replicar usando um else if, e fazer a exata mesma verificação para cada animação.
Mas, lembrando claro que em cada else if, o nome da animação precisa estar condizente com o ID definido.
E o nome da animação precisa ser da mesma animação nos dois comandos dentro do if.
E estar escritas exatamente como o nome criado para salvar a animação na pasta do projeto.
Passo 9: Chamar animação
Com isso finalizamos nosso sistema, pois, agora basta adicionar uma referência a essa classe, no script que deseja executar as animações.
E chamar essa função, passando o número do ID da animação que você deseja executar no momento.
Bem prático não acha? E sem a necessidade de nenhuma transição no animator.
Lembrando que agora as lógicas de quando chamar a animação e quando impedir ela de se executadas ficarão tudo no Script.
Por exemplo, se o jogador correr e atacar, a animação de correr não pode ser executada durante o ataque, mesmo que seja chamada em Updates.
Resumindo essa lógica você deverá controlar e resolver em seus scripts, seria impossível abordar cada detalhe em um só artigo.
Mas, esse sistema é bem simples e funcional, e com pouco conhecimento você conseguirá adaptar ao seu jogo.
Porém, caso queira receber conteúdos úteis como estes e aprender a criar sistemas elaborados como sistema de Dialogo, por exemplo.
Você pode fazer o Curso StartGamedev, que te ensina saindo do zero, e te ajuda a criar sistema de crafting, batalha, npc, dialogo, etc.
Tudo isso por um preço extremamente baixo, e te dando acesso a nossa comunidade e suporte!
Seja o primeiro a comentar.