[TUTORIAL] Double Jumping para games em 2D
3 participantes
Página 1 de 1
[TUTORIAL] Double Jumping para games em 2D
Olá, dessa vez resolvi postar um tutorial bem simples para ensinar como fazer um sistema de double jump, visto que muitas pessoas fazem de diversos modos, o meu seria uma maneira bem simples e direta. Então caso não saiba e queira saber (ou já sabe, mas queira aprender uma alternativa) confira abaixo:
O script vai depender que o objeto possua um rigidbody2D e um objeto filho que deve ser posicionado abaixo do player com o nome de "GroundCheck" para podermos verificar se o objeto está tocando no chão:
Também faça com que as plataformas que o objeto vai pular estejam no layer chamado "Ground".
Dentro do script nós vamos criar as seguintes variáveis:
Um float para mensurar a força do pulo, 3 bools: uma vai verificar se o objeto está no chão, a outra se o objeto está pulando e a outra se o pulo duplo está sendo executado. Por fim, uma variável do tipo "Transform" para armazenar a posição do objeto-filho de verificação e a variável do tipo "Rigidbody2D" para armazenar o componente de física do objeto.
Dentro do Start, referencie o Rigidbody, e faça com que a variável do tipo "Transform" receba a posição do objeto na cena com nome de "GroundCheck", através do comando GameObject.Find:
Agora no Update, precisamos verificar se o jogador pressionou a tecla de pulo, para fazer o objeto pular, para tal, faça com que a variável "isJumping" receba o comando de Input da tecla:
Então se o jogador pressionar "Space" a variável isJumping se tornará verdadeira, do contrário será false, dessa forma poderemos verificar se o jogador apertou para pular, para executarmos o pulo através do FixedUpdate.
Ainda dentro do Update, vamos checar se o objeto está tocando ao chão: Para isso, nós iremos fazer com que a variável "isGround" receba um OverlapCircle, que vai detectar através de um valor de raio se o objeto "GroundCheck" está colidindo com algo no layer "Ground".
Então passe como argumento da função: a posição de "GroudCheck", um valor para o raio (acredito que 0.1f esteja suficiente, não precisa ser tão grande) e o layer específico que criamos chamado "Ground".
Também verifique se "isGround" é verdadeiro, pois caso for, devemos passar "doubleJump" para false, dessa forma, o pulo duplo volta a desabilitar quando o objeto voltar a tocar no chão:
Agora crie uma função chamada "DoJump" para executarmos o pulo: dentro dela apenas resete a velocidade em y do rigidbody, para que a força nesse eixo não fique aumentando sempre, e por fim, adicione uma força nesse objeto através do "AddForce", com uma força direcionada para cima e multiplicada pelo valor da variável "jumpForce":
Depois de tudo isso, vamos de fato fazer o objeto pular: dentro do FixedUpdate, verifique se "isJumping é verdadeiro, caso for, crie outra verificação se "isGround" é true (ou seja, se o objeto toca no chão). Dentro dessa condição faça com que o pulo seja executado chamando a função "DoJump" e faça com que "doubleJump" fique verdadeiro, permitindo que o jogador possa dar o pulo duplo, se ele desejar.
Na condição "isGround" crie um "else if" verificando se o objeto não está no chão e se "doubleJump" é true, permitindo então, que o pulo duplo seja executado chamando a função "DoJump" e tornando false a variável "doubleJump" para impedir que o jogador dê um terceiro, quarto pulo:
Agora salve o script e através do Inspector configure a força do pulo da forma que achar necessário.
Como podem ver, é um script bem simples e rápido que dará um double jump ao objeto, então aproveite se precisar.
Código completo:
O script vai depender que o objeto possua um rigidbody2D e um objeto filho que deve ser posicionado abaixo do player com o nome de "GroundCheck" para podermos verificar se o objeto está tocando no chão:
Também faça com que as plataformas que o objeto vai pular estejam no layer chamado "Ground".
Dentro do script nós vamos criar as seguintes variáveis:
Um float para mensurar a força do pulo, 3 bools: uma vai verificar se o objeto está no chão, a outra se o objeto está pulando e a outra se o pulo duplo está sendo executado. Por fim, uma variável do tipo "Transform" para armazenar a posição do objeto-filho de verificação e a variável do tipo "Rigidbody2D" para armazenar o componente de física do objeto.
Dentro do Start, referencie o Rigidbody, e faça com que a variável do tipo "Transform" receba a posição do objeto na cena com nome de "GroundCheck", através do comando GameObject.Find:
Agora no Update, precisamos verificar se o jogador pressionou a tecla de pulo, para fazer o objeto pular, para tal, faça com que a variável "isJumping" receba o comando de Input da tecla:
- Código:
isJumping = Input.GetKeyDown(KeyCode.Space);
Então se o jogador pressionar "Space" a variável isJumping se tornará verdadeira, do contrário será false, dessa forma poderemos verificar se o jogador apertou para pular, para executarmos o pulo através do FixedUpdate.
Ainda dentro do Update, vamos checar se o objeto está tocando ao chão: Para isso, nós iremos fazer com que a variável "isGround" receba um OverlapCircle, que vai detectar através de um valor de raio se o objeto "GroundCheck" está colidindo com algo no layer "Ground".
Então passe como argumento da função: a posição de "GroudCheck", um valor para o raio (acredito que 0.1f esteja suficiente, não precisa ser tão grande) e o layer específico que criamos chamado "Ground".
Também verifique se "isGround" é verdadeiro, pois caso for, devemos passar "doubleJump" para false, dessa forma, o pulo duplo volta a desabilitar quando o objeto voltar a tocar no chão:
Agora crie uma função chamada "DoJump" para executarmos o pulo: dentro dela apenas resete a velocidade em y do rigidbody, para que a força nesse eixo não fique aumentando sempre, e por fim, adicione uma força nesse objeto através do "AddForce", com uma força direcionada para cima e multiplicada pelo valor da variável "jumpForce":
Depois de tudo isso, vamos de fato fazer o objeto pular: dentro do FixedUpdate, verifique se "isJumping é verdadeiro, caso for, crie outra verificação se "isGround" é true (ou seja, se o objeto toca no chão). Dentro dessa condição faça com que o pulo seja executado chamando a função "DoJump" e faça com que "doubleJump" fique verdadeiro, permitindo que o jogador possa dar o pulo duplo, se ele desejar.
Na condição "isGround" crie um "else if" verificando se o objeto não está no chão e se "doubleJump" é true, permitindo então, que o pulo duplo seja executado chamando a função "DoJump" e tornando false a variável "doubleJump" para impedir que o jogador dê um terceiro, quarto pulo:
Agora salve o script e através do Inspector configure a força do pulo da forma que achar necessário.
Como podem ver, é um script bem simples e rápido que dará um double jump ao objeto, então aproveite se precisar.
Código completo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Jump : MonoBehaviour {
public float jumpForce;
private bool doubleJump, isJumping, isGround;
private Transform groundCheck;
private Rigidbody2D rb;
void Start () {
rb = GetComponent<Rigidbody2D> ();
groundCheck = GameObject.Find ("GroundCheck").transform;
}
void Update () {
isJumping = Input.GetKeyDown (KeyCode.Space);
isGround = Physics2D.OverlapCircle (groundCheck.position, 0.1f, LayerMask.GetMask ("Ground"));
if (isGround)
doubleJump = false;
}
void FixedUpdate(){
if (isJumping) {
if (isGround) {
DoJump ();
doubleJump = true;
} else if (!isGround && doubleJump) {
DoJump ();
doubleJump = false;
}
}
}
void DoJump(){
rb.velocity = new Vector2 (rb.velocity.x, 0);
rb.AddForce (Vector2.up * jumpForce);
}
}
Re: [TUTORIAL] Double Jumping para games em 2D
May, o próximo pode ser sobre wall jump? Esses tutoriais são muito bom!
NKKF- ProgramadorMaster
- PONTOS : 4819
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [TUTORIAL] Double Jumping para games em 2D
NKKF escreveu:May, o próximo pode ser sobre wall jump? Esses tutoriais são muito bom!
Faço sim! Na verdade nunca fiz um wall jump, seria uma tentativa interessante! Grata pela sugestão!
Re: [TUTORIAL] Double Jumping para games em 2D
May obrigado pela ajuda esse script e muito enxuto e muito bem explicado se eu for mostrar o meu provavelmente seus olhos vão derreter ahshasha
bem mas mesmo assim o meu funciona mas não muito fluido
eu estava fazendo no método de calculo e ficava muito incerto
e eu nunca passou pela minha cabeça usar o "bool"
mas de qualquer forma vlw
bem mas mesmo assim o meu funciona mas não muito fluido
eu estava fazendo no método de calculo e ficava muito incerto
e eu nunca passou pela minha cabeça usar o "bool"
mas de qualquer forma vlw
Tópicos semelhantes
» [TUTORIAL] Unity 5 - Pulo Duplo (Double Jump) para 2D e 3D
» Onde posso encontrar audio para games casuais//arcade para baixar de graça?
» [TUTORIAL] Deixar variaveis do tipo float ou double com menos casas decimais
» [TUTORIAL] Criação de games - introdução
» Idéias para games
» Onde posso encontrar audio para games casuais//arcade para baixar de graça?
» [TUTORIAL] Deixar variaveis do tipo float ou double com menos casas decimais
» [TUTORIAL] Criação de games - introdução
» Idéias para games
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos