Tutorial: Jogo de Plataforma no Unity 5 – Parte 3 – Movimentando o Personagem

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.

1 - RigidBody

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.

2 - animator controller

Note que as duas animações que criamos para o nosso Herói estão lá: Parado e Correndo.

3 - Animator

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.

4 - Parameters

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).

5 - Setas

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.

45 - Inspector

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!

Filipe Leal

Bacharel em Ciência da Computação pela UDESC e certificado como Microsoft Specialist. Atualmente trabalha como programador na Basecorp Learning Systems. Reside em Edmonton - Canadá. Faixa preta com 1o. grau em Pa-kua, tem preferência por jogos de Ação/Aventura, RPG, Luta e Party Games. Seu jogo favorito é The Legend of Zelda - Ocarina of Time.

14 thoughts on “Tutorial: Jogo de Plataforma no Unity 5 – Parte 3 – Movimentando o Personagem

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *