Noticias

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

Saltar estando en el aire, pero sólo una vez

Iniciado por Wazabee, Marzo 27, 2017, 01:50:09 AM

Tema anterior - Siguiente tema
Hola tod@s,
 
Estoy atascado con los movimientos de un personaje. Por ahora puede andar, correr, girar y saltar pero necesito que, una vez ha saltado salte otra vez en el aire y eso no consigo sacarlo. Probablemente sea algo sencillo, pero estoy aprendiendo JS y el tema se me resiste un poco. Adjunto el código a ver si me podéis echar un cable...
 

#pragma strict
var velocidad : float = 20;
var velGiro : float = 3;
var fuerzaSalto : int = 350;
var onGround : boolean = true;
function Start () {
}
function Update () {
    var ejex : Vector3 = Input.GetAxis("Horizontal") * transform.up * Time.deltaTime;                       //Girar
    var ejez : Vector3 = Input.GetAxis("Vertical") * Vector3(,,1) * Time.deltaTime * velocidad;           //Andar
    //var ejey : Vector3 = Input.GetAxis("Jump") * Vector3(0,1,0) * Time.deltaTime * velocidad;
    var correr : Vector3 = Input.GetAxis("Fire1") * ejez * 2;                                               //Correr
    transform.Translate(ejez + correr);  
    transform.Rotate(ejex,velGiro);
    Salto();
   
}
function OnCollisionEnter ( collision : Collision){
    onGround=true;
    print("He tocado el suelo!!");
}
    function Salto () {                                                                                     //Saltar
        if (Input.GetButtonDown("Jump") && onGround){
            GetComponent.<Rigidbody>().AddForce(Vector3.up*fuerzaSalto);
            print("He saltado!!");
            onGround=false;
        }
    }

 
Esto es lo que tengo por ahora a ver si me podéis ayudar a sacarlo.
 
Saludos y geacias!

Marzo 27, 2017, 02:37:12 AM #1 Ultima modificación: Marzo 27, 2017, 02:41:05 AM por lightbug
No lei bien tu codigo pero la forma que lo hago yo es determinando la cantidad de saltos disponibles, cuando estoy en el suelo la cantidad es 2 (si fuera doble salto), entonces cada vez que apretas "Jump", (independientemente de donde estes) se realiza el salto (yo reseteo antes la velocidad de y en cero, queda mas lindo) y luego decremento la cantidad de saltos disponibles. Donde esta el problema de esto? si te dejas caer de cualquier plataforma tendrias un salto mas para el aire que si saltas desde el suelo como antes, por lo que lo mejor es manejarse por saltos disponibles en el aire. Si estas en el suelo la cantidad sera 1 (para salto doble), cuando saltas desde el suelo lo haces como siempre, cuando saltas desde el aire decrementas la cantidad de saltos disponibles.
 
Algo asi un pseudocodigo por arriba
 

if(Input "Jump")
{
     if(suelo)
     {
      AplicarSalto();
     }
else
{
         if(saltosDisponiblesAire > 0){
      AplicarSalto();
      saltosDisponiblesAire--;
   }
     }
}
...
if(suelo)
saltosDisponiblesAire = CantidadInicial; //doble = 1 , triple = 2 , ...

 
salu2
 
PD: fijate que cuando saltas estas imponiendo el onGround = false, eso lo deberia decidir algun spherecast, raycast, trigger o el metodo que elijas, pero no una input, a la larga te va a traer problemas.

Genial! Gracias Lightbug, tu consejo me ha sido muy útil!
 
Saludos!

En la función salto le dices que cuando onground=true salte... y solo es true cuando toca algo, si le quitas el onground en el if de la función salto deberia hacer lo que quieres.

Etiquetas: