Vamos aprender como movimentar o nosso personagem hoje no Unity 5.
No tutorial anterior aprendemos a criar e atribuir animações para o nosso herói. Agora vamos movimentar o personagem e fazer com que as animações sejam executadas.
Movimentar o Personagem no Unity 5
O primeiro passo é preparar o nosso Herói para sofrer influência da força física. Para isso adicionamos um componente chamado Rigidbody2D.
Selecione o objeto Heroi e clique em Add Component -> Physics 2D -> Rigidbody 2D.
Se você executar o jogo agora, verá que o herói irá cair para o infinito. Isto é causado porque não temos chão e o herói está sujeito às forças da gravidade. Então, temporariamente, vamos desativar a gravidade para que possamos ver o nosso herói se movimentar. Vamos ativá-la novamente em um tutorial futuro. Para desativar a gravidade do nosso herói, selecione o objeto Heroi e nas propriedades do Rigidbody2D, marque a opção IsKinematic.
Agora estamos prontos para criar o script de movimento. Clique em Add Component -> New Script e nomeie-o para Heroi.
Substitua o código que foi gerado automaticamente por este:
using UnityEngine;
using System.Collections;
public class Heroi : MonoBehaviour {
Animator animator;
float axis;
Vector2 velocidade;
bool ladoDireito = true;
public float MaxVelocidade = 10;
// Use this for initialization
void Start () {
animator = GetComponent<Animator> ();
}
void FixedUpdate()
{
axis = Input.GetAxis ("Horizontal");
if (axis > 0 && !ladoDireito)
Vire ();
if (axis < 0 && ladoDireito)
Vire ();
velocidade = new Vector2 (axis * MaxVelocidade, GetComponent<Rigidbody2D>().velocity.y);
GetComponent<Rigidbody2D>().velocity = velocidade;
}
// Update is called once per frame
void Update () {
}
void Vire(){
ladoDireito = !ladoDireito;
Vector2 novoScale = new Vector2 (transform.localScale.x * -1, transform.localScale.y);
transform.localScale = novoScale;
}
}
Algumas informações importantes sobre o código acima:
- A variável ladoDireito indica para que lado o personagem está olhando. Como o sprite do personagem criado é olhando para o lado direito, então o valor da variável é verdadeiro (true);
- A função Vire() faz a imagem olhar para o lado oposto;
- A variável MaxVelocidade é pública, o que permite que possamos alterar o seu valor no painel Inspector no Unity;
- Input.GetAxis(“Horizontal”) serve para saber quando o jogador pressionou um dos botões considerados como movimento horizontal. Por padrão no Unity esses botões são: A e D, as setas para direita ou esquerda e, se você estiver com um controle ligado no pc, o controle analógico esquerdo ou o controle em “cruz”.
Se tudo deu certo você pode executar o projeto e movimentar o seu personagem!
É isso aí pe… O quê? A animação não funciona? Claro que não! [Risada maligna] Temos que dizer para a nossa animação quando ela tem que mudar de Parado para Correndo.
Lembra que criamos um AnimatorController no tutorial anterior? Abra-o e você verá que uma nova janela vai aparecer com umas caixinhas nela.
Note que as duas animações que criamos para o nosso Herói estão lá: Parado e Correndo.
O que vamos fazer agora é “ligar” as duas.
Primeiro note que ao lado existe uma aba chamada Parameters. Clique nela e em seguida no sinal de mais (+) e escolha Float. Nomeie-a como Velocidade.
Agora clique com o botão direito na caixinha escrita Parado e selecione Make Transition e clique em Correndo. Isso vai criar uma seta que sai de Parado para Correndo. Clique nesta seta e no painel Inspector, desmarque a opção Has Exit Time e na parte Settings, mude Transition Duration (s) para 0 (zero).
Onde tem Conditions, clique no sinal de mais (+). No primeiro campo que apareceu, selecione Velocidade, no segundo campo selecione Greater e no terceiro campo coloque 0.001.
Vamos fazer o caminho inverso agora.
Clique com o botão direito em Correndo -> Make Transition -> clique em Parado. Agora temos a setinha voltando. Execute os mesmos passos para retirar o Has Exit Time, zerar o campo Transition Duration (s) e adicionar uma condition. A única diferença é que ao invés de escolher Greater no segundo campo, vamos escolher Less.
Só falta agora alterar o nosso código para preencher esse parâmetro com a velocidade do personagem.
Abaixo de:
velocidade = new Vector2 (axis * MaxVelocidade, GetComponent<Rigidbody2D>().velocity.y);
Adicione:
animator.SetFloat ("Velocidade", Mathf.Abs (axis));
Agora sim! Salve e execute o seu jogo e veja o personagem andando!
É isso aí, pessoal! No próximo tutorial vamos criar as plataformas! Pois sem elas, este jogo não é de plataforma! \o/
Abraços e até mais!
14 thoughts on “Tutorial: Jogo de Plataforma no Unity 5 – Parte 3 – Movimentando o Personagem”