No tutorial anterior, habilitamos a gravidade do personagem e fizemos com que ele ficasse em cima da plataforma. Agora vamos ver como pular de uma plataforma para outra.
Vamos nessa!
Pulo do personagem
A primeira coisa a se fazer é colocar o nosso herói em uma layer diferente para que possamos separá-lo do cenário.
Selecione o objeto Heroi e no painel Inspector clique em Layer -> Add Layer… Agora preencha uma User Layer com o nome Jogador. Selecione o Heroi de novo e, quando você clicar em Layer, a que criamos vai aparecer. Basta selecioná-la e pronto.
Agora vamos criar um objeto vazio e posicioná-lo nos pés do nosso personagem. Este objeto servirá para identificarmos quando o personagem está no chão.
Clique com o botão direito no objeto Heroi e selecione Create Empty. O objeto será criado como filho do objeto Heroi. Altere a posição dele para que ele fique nos pés do personagem e mude seu nome para ChaoCheck.
O próximo passo é escrever o script para fazer o personagem pular.
Abra o script do Heroi e altere para ficar como abaixo. As linhas novas estão em negrito:
using UnityEngine;
using System.Collections;
public class Heroi : MonoBehaviour {
Animator animator;
float axis;
Vector2 velocidade;
bool ladoDireito = true;
bool noChao = false;
float chaoCheckRaio = 0.2f;
public float MaxVelocidade = 10;
public Transform ChaoCheck;
public LayerMask OQueEChao;
// Use this for initialization
void Start () {
animator = GetComponent<Animator> ();
}
void FixedUpdate()
{
noChao = Physics2D.OverlapCircle (ChaoCheck.position, chaoCheckRaio, OQueEChao);
axis = Input.GetAxis ("Horizontal");
if (axis > 0 && !ladoDireito)
Vire ();
if (axis < 0 && ladoDireito)
Vire ();
velocidade = new Vector2 (axis * MaxVelocidade, GetComponent<Rigidbody2D>().velocity.y);
animator.SetFloat ("Velocidade", Mathf.Abs (axis));
GetComponent<Rigidbody2D>().velocity = velocidade;
}
// Update is called once per frame
void Update () {
if (noChao && Input.GetButton ("Jump")) {
GetComponent<Rigidbody2D>().AddForce (new Vector2 (0, 30));
}
}
void Vire(){
ladoDireito = !ladoDireito;
Vector2 novoScale = new Vector2 (transform.localScale.x * -1, transform.localScale.y);
transform.localScale = novoScale;
}
}
Explicando o script:
- Adicionamos 4 novas variáveis, sendo 2 delas públicas:
- noChao: verifica se o personagem está em contato com o chão;
- chaoCheckRaio: é o tamanho da esfera imaginária que será gerada ao redor do ChaoCheck. Essa esfera será tipo um Colisor mas diferente;
- ChaoCheck: é a posição do ChaoCheck que criamos. Ela é publica para podermos atribuir ela no painel de Inspeção;
- OQueEChao: são todas as Layers que consideramos chão. Também será atribuída através do editor.
- No método FixedUpdate ficamos verificando se o Heroi está em contato com o chão. A funcão Physics2d.OverlapCircle é a que cria o círculo imaginário ao redor do ChaoCheck com tamanho de chaoCheckRaio e só retorna verdadeiro quando este círculo está em contato com as Layers OQueEChao.
- No método Update verificamos se o personagem está no chão e se o botão de pulo foi pressionado. Se sim, adicionamos uma força no eixo Y de 30 unidades, a qual fará o personagem ser “jogado” para cima.
Volte para o Unity e selecione o objeto Heroi. Veja agora que no script apareceram as novas variáveis públicas que criamos. Selecione o ChaoCheck na variável ChaoCheck e selecione todas as layers menos a layer Jogador no campo O Que E Chao.
Execute e veja o personagem pular quando você pressiona barra de espaço!
É isso aí, pessoal! Estamos quase no fim! Próximo tutorial vamos animar o pulo e vou dar algumas dicas de melhorias que podem ser feitas no seu jogo!
Abraços e até mais!
8 thoughts on “Tutorial: Jogo de Plataforma no Unity 5 – Parte 6 – Pulo”