Desenvolvimento Unity

Mecânica de pulo ao segurar botão – Plataforma 2D

Você que é fã de jogos plataforma, programa utilizando a Engine Unity 2D e quer criar personagens para seu game. Então você vai adorar o post Mecânica de pulo ao segurar botão, pois o mesmo ensina de maneira fácil e rápida a implementação da mecânica de pular mais alto ao segurar o botão de pulo.

Mecânica de pulo ao segurar botão – Plataforma 2D

Em alguns jogos de plataforma, pode-se perceber a mecânica de pular alturas mais elevadas ao segurar o botão do pulo. Para adicionar essa mecânica dentro do nosso jogo, tudo o que precisamos fazer é seguir os passos abaixo!

Script básico

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    public string estado;
    private string AR = "ar";
    private string CHAO = "chao";   

    private float jumpTimeCounter;
    public float jumpTime;
    public float jumpForce;
    private bool isJumping;
    public float moveSpeed;
    private float moveInput; 

    private Rigidbody2D rb;

    void Start ()
    {
        rb = GetComponent<Rigidbody2D>();        
    }	
	
	void FixedUpdate () 
    {        
        moveInput = Input.GetAxisRaw("Horizontal");
        rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);        
    }

    private void Update()
    {
        KeyInputs();
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Ground")
        {
            estado = CHAO;
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        if (estado == CHAO)
        {
            if (collision.gameObject.tag == "Ground")
                estado = AR;
        }
    }

    private void KeyInputs ()
    {        
        if (Input.GetKeyDown (KeyCode.Space) && estado==CHAO)
        {
            isJumping = true;
            rb.velocity = Vector2.up * jumpForce;
            jumpTimeCounter = jumpTime;            
        }
        
        if (Input.GetKey(KeyCode.Space) && isJumping==true)
        {
            if (jumpTimeCounter>0)
            {
                rb.velocity = Vector2.up * jumpForce;
                jumpTimeCounter -= Time.deltaTime;
            }
            else { isJumping = false; }
        }

        if (Input.GetKeyUp(KeyCode.Space))
            isJumping = false;
    }    
}

Entendendo as variáveis

Para a aplicação da mecânica de segurar o botão e pular mais alto, utilizamos o nosso sistema de estados para simplificar o código. Caso ainda não tenha visto a aula de como criar sistema estados para objetos, dê uma olhada aqui!

Como visto na aula de estados, primeiramente criamos as variáveis que irão determinar se o jogador está em contato com o chão ou pulando. Logo após, criamos quatro variáveis que são essenciais para que o pulo aconteça; “jumpTimeCounter”, “jumpTime”, “jumpForce” e “isJumping.

  • A variável “jumpTimeCounter” é o contador de tempo que irá verificar por quanto tempo o jogador já está pulando e, caso o tempo que foi previamente determinado, acabe, o jogador para de subir e começa a ser puxado pela gravidade novamente. O contador é acionado assim que o jogador aperta a tecla espaço e é resetado quando volta ao chão.
  • A variável “jumpTime” é aonde vamos determinar o limite máximo de tempo que queremos que o nosso jogador fique no ar. É a partir desse número  que o nosso contador irá se basear.
  • A variável “jumpForce” é a força do pulo do nosso jogador. Quanto maior esse número, mais alto o jogador vai ser capaz de pular.
  • A variável “isJumping” é uma booleana que verifica se o jogador está pulando, caso esteja, não permite que ele pule novamente no ar.

Logo após as variáveis relacionadas ao pulo, temos as relacionadas a movimentação do jogador; “moveSpeed” e “moveInput”

  • A variável “moveSpeed” está relacionada com a velocidade do jogador, quanto maior o número atribuído a essa variável, maior a velocidade que ele poderá atingir.
  • A variável “moveInput” é a movimentação básica, para esquerda e direita, através das setas. Ela está atribuída à expressão “Input.GetAxisRaw(“Horizontal”);” Dessa forma, quando o jogador apertar a seta para esquerda, a variável irá nos retornar -1, já quando for pressionado o botão para direita, ela nos retorna 1.

Iremos multiplicar “moveInput” por “moveSpeed” e atribuir o resultado a velocidade do jogador, fazendo dessa forma a movimentação do jogador para esquerda e direita.

Entendendo melhor o código

Tirando os métodos básicos (como Start, Update e etc), o código é basicamente constituído de duas outras estruturas básicas:

  • Lógicas de colisão; Estas também foram vistas na aula de estados, dê uma olhada aqui!
  • Key Inputs; O método “KeyInputs” é aonde está localizado a lógica da mecânica de pulo. Nela temos duas condicionais, a primeira é caso o jogador só aperte o botão de espaço uma vez, caso isso aconteça, ele irá pular de acordo com força pré determinada pelo “jumpForce”. A segunda condicional, é caso o jogador segure o botão de pulo, quando isso acontece, o contador é acionado e o jogador continua subindo até o contador chegar a zero.

Componentes na Unity

Agora é a hora de atribuirmos alguns valores dentro do Inspector!

Player Inspector

Adicione um Box Collider 2D, um RigidyBody 2D e o nosso script ao jogador!  Escolha também a força do pulo e a altura máxima em que o jogador pode chegar ao segurar o botão (Jump Time). Escolha também um valor para a velocidade de movimentação do seu jogador.

Plat Inspector

Na sua plataforma, apenas adicione um Box Collider 2D. Não se esqueça de colocar a Tag “Ground”, se não o nosso sistema de estados não irá funcionar!

Pronto! Agora o seu jogador pode controlar a altura do pulo dentro do seu jogo!

Acesse a nossa área de cursos para aprender a desenvolver jogos utilizando as ferramentas Unity, Construct 2, Game Maker e MonoGame. Participe também do nosso grupo de estudos no Facebook.

Danilo Filitto

Sou Mestre em Ciência da Computação pela Universidade Estadual de Maringá – UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná – UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista – UNOESTE.
Atuo na área acadêmica como professor desde 2006. Além de professor sou desenvolvedor de jogos, palestrante e mantenedor dos sites dfilitto e Make Indie Games.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 2.252 outros assinantes

Anúncios

Aprenda a criar seus jogos com os melhores desenvolvedores de jogos

Advertisement

Quer aprender a programar?