Noticias

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

Empezando con Unity

Iniciado por jose sanchez, Noviembre 05, 2017, 06:49:43 PM

Tema anterior - Siguiente tema
Noviembre 05, 2017, 06:49:43 PM Ultima modificación: Noviembre 06, 2017, 08:41:27 AM por pioj
Hola buenas gente,
 
Acabo de descubrir esta pagina buscando por la web de unity.
 
He empezado hace una semanilla a hacer un curso de unity en youtube por lo que son muchas las cosas que tengo aun que aprender y espero que este foro nos podamos ayudar.
 
La cuestion es que en el mismo curso que estoy haciendo me ha surgido un problema con los scrips, pues no se mucho de programacion y mucho menos con respecto a unity y no  consigo identificar mi fallo. La cosa es que segun el tutorial, he creado un script que permitira que mi personaje pueda dar varios saltos antes de tocar al suelo y que cuando lo toque se reinicie el contador, pero mi problema es que solo da un salto. Os dejo el codigo por si alguien pudiera ayudar. Gracias por la ayuda.
 
Dejo aclarado que mi personaje esta en la capa Player y el suelo en su capa Suelo, asi que deberia estar todo bien. Tambien dejo el script y el link del tutorial en cuestion por si teneis dudas,
 


   
" width="480">

 

 
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Saltar : MonoBehaviour {
    
    public Transform Pie;
    public LayerMask Suelo;
    public bool estaenelsuelo = false;
    public float radiopie=0.1f;
 
    public float fuerzasaltar = 30f;
    int cuentasalto=3;
    // Use this for initialization
    void Start () {
        
    }
    void FixedUpdate ()
    {
        estaenelsuelo = Physics2D.OverlapCircle (Pie.position, radiopie, Suelo);
        if (Input.GetKey ("space") && estaenelsuelo==true ) {
            //instrucciones
            gameObject.GetComponent <Rigidbody2D> ().AddForce (new Vector2 (, fuerzasaltar*cuentasalto));
        }
        if (Input.GetKey ("space") && estaenelsuelo == false && cuentasalto > && gameObject.GetComponent<Rigidbody2D>().velocity.y > ) {
            
            gameObject.GetComponent<Rigidbody2D>().AddForce (new Vector2 (, fuerzasaltar*cuentasalto));
            cuentasalto = cuentasalto - 1;
        }
        if (!Input.GetKey ("space") && estaenelsuelo) {
            cuentasalto = 3;
        }
    
    }
}

 
//www.unityspain.com/applications/core/interface/file/attachment.php?id=11083" data-fileid="11083" rel="">Saltar.cs

Noviembre 06, 2017, 12:04:44 AM #1 Ultima modificación: Noviembre 06, 2017, 12:09:32 AM por FNP
Hola Jose, bienvenido. creo que deberías haber hecho dos hilos, uno de presentación y este otro en Scripting.
 
Cita de: jose sanchez date=1509904183no se mucho de programacion y mucho menos con respecto a unity y no  consigo identificar mi fallo.
   


Pues no está mal, estas empezando con físicas, capas en Input, y tu fallo se debe a que no estas gestionando bien el Input y no cuentas con el tiempo de proceso del bucle de juego, pero bueno, tu sabrás el nivel que tienes y si es lo mas adecuado para empezar.
 
En un vistazo rápido creo que el problema está en el GetKey, no es que solo de un salto, es que da los tres antes de que te enteres, te explico.
 
- Primero se controla si esta en el suelo.
 
- si está en el suelo y la tecla espacio esta pulsada, se aplica la fuerza.
 
- lo siguiente no se ejecuta porque no se cumplen las condiciones.
 
- En el siguiente fotograma se vuelve a realizar la comprobación, como ya se ha aplicado la fuerza no estará en el suelo.
 
- Como no está en el suelo y la tecla espacio sigue pulsada (va tan rápido que seguro que no te ha dado tiempo a soltarla) da el siguiente salto y lo resta (como ves, no es que no de el salto, es que no te das ni cuenta)
 
- Así sigue hasta que se le acaben los saltos o sueltes el espacio (se acabaran antes los tres saltos)
 
- En el momento que sueltes el espacio o se le acaben los saltos, las físicas seguirán su proceso y el personaje caerá, por lo que en algún momento se dará la condición de que no este el espacio pulsado y este en el suelo, en ese momento el contador de saltos se restaura.
 
 
 
Usa una variable de control para saber si ha hecho un salto y no permitas otro hasta que no haya hecho un GetKeyUp (soltado la tecla), en ese momento puedes hacer el segundo salto, controla si ha soltado la tecla con la variable y entonces le dejas hacer el salto y le decrementas el contador,
 
 

Bienvenido a la Comunidad. Por favor, lee las normas que te dejé en el mensaje de bienvenida.
 
 

Etiquetas: