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