Dev (Back & Front)ARTIGO

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:

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:

aba Animator

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:

Idle na aba Animator (Unity)

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:

adicionando tipos no Unity

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:

Adicionando condições em Animator (Unity)

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:

Aba Conditions

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:

Player 2D com animação no Unity

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

Microsoft (MVP), atualmente trabalha como Arquiteto de Software para TV Bandeirantes. Nesses últimos anos, focou nas tecnologias criadas pela Microsoft, mas sempre esteve antenado para as novas tecnologias que estão surgindo no mercado. Em um breve resumo, é uma pessoa apaixonada pelo que faz, tem a sua profissão como hobby.

Ver perfil