Para os jogos de plataformas no estilo Super Mario World, as mecânicas de pulo são fundamentais, afinal, o jogador não vai andar apenas em linha reta. Depende do modelo de jogo, as mecânicas de pulo são implementas através das animações com refinamento no IK.
Vamos criar um script que detecta se o usuário pressionou a tecla Space e se está no chão, para que só nessas condições o nosso personagem possa pular.
Utilizamos um cilindro como exemplo de personagem, se atente para que o mesmo contenha um componente de colisão. Para o componente de física, vamos adicionar via script a seguir.
Antes de mais nada, vamos criar um novo C# script chamado de PlayerJump, vamos inserir o código abaixo.
using UnityEngine;
//Requisitamos o componente Rigidbody
[RequireComponent(typeof(Rigidbody))]
public class PlayerJump : MonoBehaviour
{
//Variável que controla a força do pulo
public float jumpForce = 3.0f;
//Variável que controla a massa/peso
public float mass = 3.0f;
//Acessamos o componente Rigidbody através dessa variável
private Rigidbody rigidbody;
//Variável de controle que nos diz se o personagem está ou não no chão
private bool isGround = false;
void Start()
{
//Assim que o script é executado, obtemos o componente Rigidbody e atribuimos a nossa variável
rigidbody = GetComponent<Rigidbody>();
//Definimos o valor da massa via script
rigidbody.mass = mass;
}
void Update()
{
//Verificamos se o usuário NÃO pressionou a tecla Space ou se não está no chão
if (!Input.GetKeyDown(KeyCode.Space) || !isGround)
return;
//Adicionamos uma força ao Rigidbody
rigidbody.AddForce(
Vector3.up * jumpForce, //Para fazer o personagem pular, então multiplicamos (0, 1, 0) pelo valor do pulo
ForceMode.Impulse // Ajustamos a força para o tipo Impulse
);
}
//Verifica se o personagem tocou no chão
void OnCollisionEnter(Collision collision)
{
isGround = true;
}
//Verifica se o personagem saiu do chão
void OnCollisionExit(Collision collision)
{
isGround = false;
}
}
O código acima está todo documentado e dispensa explicações, mas vamos entender o fluxo de execução.
- Personagem está parado;
- Player pressiona a tecla Space;
- Rigidbody adiciona força de impulso para cima;
- Script detecta que o player não está mais no chão;
- Personagem colide com o chão;
- Script detecta que o player retornou para o chão.
Para finalizar, vamos adicionar o nosso script ao personagem, configurando a massa como 1 e a força de pulo como 3. Perceba que assim que o script for inserido, o componente Rigidbody será inserido automaticamente.
Um complemento para essa mecânica pode ser vista no nosso artigo Criando movimentações de um simples personagem na Unity 3D.