Unity: Animator
Dando continuidade à sua série de artigos sobre o C# com Unity, neste artigo o autor mostra como manipular as animações criadas nos artigos anteriores.
Introdução
Dando continuidade à minha série de artigos sobre o C# com Unity, hoje mostrarei como manipular as animações criadas no meu artigo anterior.
Caso tenha interesse em ler os primeiros artigos dessa série, segue o link de cada um deles abaixo:
- Introdução ao Unity 3D
- Unity: criando o seu primeiro game 2D
- Unity: introdução a programação orientada a objetos (POO) com C#
- Unity: movimentando o personagem
- Unity: animações em um game 2D
Animator
Essa aba nos permite gerenciar quando cada animação deve de ser executada. Tendo isso em mente, veja abaixo como fazer com que o nosso personagem transite pelas animações Idle, Walking e Jump.
O primeiro passo será abrir o projeto desenvolvido anteriormente. Feito isso, selecione o sprite do personagem na aba Hierarchy e vá até a aba Animator. Abaixo você tem uma imagem demonstrando esse passo:

Como você já deve ter notado, uma animação é um evento ou uma ação, como: morrendo, pulando, atacando, etc e o nosso personagem tem que estar em uma dessas animações para fazer um determinando evento.
O primeiro estado que ele deve ter é o Idle, esse será chamado assim que o game iniciar ou quando ele não estiver em nenhum outro evento. Para deixar o Idle como default, clique com o botão direito do seu mouse nele e selecione: Set as Layer Default State. Abaixo você tem uma imagem demonstrando esse passo:

Agora, caso você de o play no seu game, irá notar que ele já irá entrar nessa animação. Abaixo você tem uma imagem demonstrando esse passo:

Agora que você já tem uma animação quando o game inicia. Vamos adicionar algumas condições para que ele transite entre as outras.
A próxima transição será entre o player parado e correndo. Para isso, selecione a opção Make Transition do Idle e clique em Walking. Note que agora você tem uma seta saindo de Idle para Walking, correto?
Agora, na parte inferior dessa aba, clique no “+” da opção Parameters e adicione um novo tipo Float com o nome movimento. Abaixo você tem uma imagem demonstrando esse passo:

A seta está indicando que da animação Idle ela pode ir para Walking e o parâmetro responsável por isso é o movimento. Agora clique na seta do Idle para Walking na aba Inspector, note que no final dessa aba você tem uma opção chamada Conditions. Selecione “movimento” e “Greater” “0”, igual à imagem abaixo.

Isso significa que quando o movimento do personagem for maior que zero, está condição será ativada e a animação de Idle irá mudar para Waliking. Agora faça o sentido contrário de Walking para Idle, mas em conditions selecione “movimento”, “Less”, “0.1”, dessa forma quando o movimento for menor que 0.1 o player irá sair de Walking para Idle novamente, como na imagem abaixo:

Bom, com as transições prontas do nosso player parado para andando, vamos agora criar as condições dele parado para pulando. Para isso, crie uma Transition de Idle para Jump, e em seguida clique na seta e adicione uma nova condition chamada chão do tipo Bool (calma, caso esteja começando com programação eu irei criar um artigo sobre tipos em C#), mas para esse primeiro momento, um tipo Bool te permite trabalhar com verdadeiro ou falso.
Agora nas transitions indo em direção a Jump, vamos marcar as condições chao e false. Nas transitions saindo do jump, vamos trocar para chao e true. Abaixo você pode ver um exemplo desse passo:

Tudo certo no Animator, vamos para o nosso script Player chamar as nossas animações de dentro dos métodos que nós criamos nos artigos anteriores. Para isso, dê dois cliques no seu script e abra ele no seu editor de textos. Em seguida, atualize ele com o trecho de código abaixo:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float velocidade;
public float forcaPulo;
private bool verificaChao;
public Transform chaoVerificador;
public Transform spritePlayer;
private Animator animator;
private bool estaNoChao;
// Use this for initialization
void Start()
{
animator = spritePlayer.GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
Movimentacao();
}
void Movimentacao()
{
animator.SetFloat("movimento", Mathf.Abs(Input.GetAxisRaw("Horizontal")));
verificaChao = Physics2D.Linecast(transform.position, chaoVerificador.position, 1 << LayerMask.NameToLayer("Chao"));
animator.SetBool("chao", verificaChao);
if (Input.GetAxisRaw("Horizontal") > 0)
{
transform.Translate(Vector2.right * velocidade * Time.deltaTime);
transform.eulerAngles = new Vector2(0, 0);
}
if (Input.GetAxisRaw("Horizontal") < 0)
{
transform.Translate(Vector2.right * velocidade * Time.deltaTime);
transform.eulerAngles = new Vector2(0, 180);
}
if (Input.GetButtonDown("Jump") && verificaChao)
{
GetComponent<Rigidbody2D>().AddForce(transform.up * forcaPulo);
}
}
}
Analisando esse código, você tem:
Duas novas variáveis, uma pública e uma privada.
public Transform spritePlayer; private Animator animator;
- spritePlayer: será responsável por vincular o nosso sprite do Player
- animator: irá nos permitir chamar tudo que criamos na aba Animator
Dentro do nosso método Start() nós adicionamos uma chamada ao componente Animator:
animator = spritePlayer.GetComponent<Animator>();
Dentro do método Movimentacao(), nós adicionamos uma chamada para movimento:
animator.SetFloat("movimento", Mathf.Abs(Input.GetAxisRaw("Horizontal")));
Essa linha irá jogar dentro do parâmetro movimento um valor 0 ou maior que 0, em seguida, o Mathf.abs irá pegar o valor absoluto de Input.GetAxisRaw (“Horizontal”) (nós vimos nos artigos anteriores).
Logo abaixo de estanoChao, nós adicionamos uma chamada ao animator chao, passando um bool para que ele chame a animação conforme definimos anteriormente:
animator.SetBool ("chao", estaNoChao);
Agora salve o arquivo e volte ao Unity, e em seguida dê um play no seu game e teste as ações que nós criamos. Caso tudo esteja funcionado corretamente, você terá o resultado abaixo:

Bom, com isso nós finalizamos mais essa parte do nosso game. Espero que tenham gostado e até o próximo artigo, pessoal!








