Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

player 2d

Iniciado por R3N3, Noviembre 21, 2016, 02:06:25 PM

Tema anterior - Siguiente tema
Hola unityspain. Quisiera lograr un personaje que haga un doble salto, es decir desde el suelo puedo saltar una vez y en el aire puedeo hacerlo una vez más ó si caigo de una plataforma en el aire puedo usar esos dos saltos. Por ahora tengo una variable(limiteSalto) que limita el # de veces que puedo saltar y otra(contarSaltos) en la que cuento cada vez que se presiona el botón de salto. Entonces al llegar al límite no se puede saltar más, hasta que el personaje vuelva al suelo y reinicie la variable contarSaltos a 0. El problema está en que cuando estoy en el suelo y presiono el botón Jump una vez contarSaltos es igual a 1, no se reinicia porque no ha llegado al límite y desde el suelo puedes saltar entonces tres veces. Si paso la línea  contarSaltos = 0 dentro del if(isGrounded), pues no me cuenta el primer salto porque la variable se mantiene en 0 y en el aire comienza el conteo. Aquí les dejo la parte del código de interés. La variable isGrounded es un boolean que obtengo con un Raycast, así logro algo parecido a la propiedad isGrounded del character controller. Gracias por cualquier ayuda que puedan ofrecer.
//www.unityspain.com/applications/core/interface/file/attachment.php?id=9996">codigo.txt

Hola, primero fijate que el simbolito "<>" es para poner codigo, jaja, no importa, La cosa esta en como diseñas tu codigo, yo tengo un juego que puedo hacer hasta 5 saltos( si 5 :) ) y lo pense asi, vos podes saltar siempre, no importa si esta o no en el suelo, lo que si cuando toca el suelo la cantidad de saltos disponibles se reinicia.
 
En esta porcion de codigo estas reiniciando solo cuando supera el limite.
 

if(contarSaltos >= limiteSalto){
      puedeSaltar = false;
      if(isGrounded){
      contarSaltos = 0;
         puedeSaltar = true;
   }
   }
//debes reciniciar siempre que toque el suelo
//asi

 
 
 
Fijate que tenes "contarsaltos" y "limitesalto", te conviene trabajar con un valor y decrementarlo, luego comparas con 0 directamente.(te ahorras una variable jaja algo es algo). Una onda asi:
 

if(Input.GetButtonDown("Jump")  && saltosDisponibles > 0){
         rb.velocity = new Vector3(rb.velocity.x, velSalto+2, 0);
         saltosDisponibles--;
      }
//Reset
if(isGrounded)
{
saltosDisponibles = 2; //para doble salto
}

 
Saludos!

Etiquetas: