Noticias

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

[Ayuda] isGrounded no funciona

Iniciado por Centauro5legs, Febrero 19, 2018, 03:41:36 AM

Tema anterior - Siguiente tema
Febrero 19, 2018, 03:41:36 AM Ultima modificación: Febrero 19, 2018, 01:19:36 PM por pioj
Primero que nada, para quien no lo sepa, el CharacterControler cuenta con una función llamada  "isGrounded", la cual devuelve un "True" si el CharacterControler toca el piso, y "False" sino.
 
Pues simplemente no me funciona, para no hacer el cuento largo, si CharacterControler esta tocando el piso, "IsGrounded" devuelve trues y false aleatoriamente, en cambio, si no esta tocando el piso, si devuelve únicamente "false".
 
Mi Script de Movimiento es el siguiente;
 

      //Rotacion
        transform.Rotate(0, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime, 0);
        //Obtiene los valores de entrada
        motion = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        if (controller.isGrounded)
        {
            //Calcula el Movimiento
            motion = transform.TransformDirection(motion);
            motion *= speed;
            //Corre
            if (Input.GetKey(KeyCode.AltGr))
            {
                if (DataUsuario.GetEstadoAnimación().Contains("Rápido"))
                    motion *= 2.0f;
                segundos = 0;
            }
            //Salta
            if (Input.GetButton("Jump"))
            {
                motion.y = jumpForce;
            }
        }else{
           //Gravedad
            motion.y -= gravity * Time.deltaTime * 2;
   }
        //Se mueve
        controller.Move(motion * Time.deltaTime);

 
Y funciona bien, pero necesito que el "IsGrounded" funcione bien, para que mi Script de Animacion funcione correctamente. Alguien sabe que puede provocar el fallo?

@Centauro5legs Hola, cómo estás?


Usa tu variable gravity en el eje Y de motion:
 

float gravity = 0.0f;
motion = new Vector3(Input.GetAxis("Horizontal"), gravity, Input.GetAxis("Vertical"));

 
 
 
También usa la misma variable gravity en el código del salto...

(En lugar de motion.y) :
 

if (controller.isGrounded)
{
  if (Input.GetButton("Jump"))
  {
    gravity = jumpForce;
  }
}
else
{
  gravity += Physics.gravity.y * Time.deltaTime * 2;
}

 
 
 
A ver si así no tienes el mismo problema.

Suerteee.

Ya lo corregir, la solución queda de este modo;
 


   //Rotacion
        transform.Rotate(0, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime, 0);
        //Obtiene los valores de entrada
        motion = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        if (controller.isGrounded)
        {
            //Calcula el Movimiento
            motion = transform.TransformDirection(motion);
            motion *= speed;
            //Corre
            if (Input.GetKey(KeyCode.AltGr))
            {
                if (DataUsuario.GetEstadoAnimación().Contains("Rápido"))
                    motion *= 2.0f;
                segundos = 0;
            }
            //Salta
            if (Input.GetButton("Jump"))
            {
                motion.y = jumpForce;
            }
        }
       
   //Gravedad
        motion.y -= gravity * Time.deltaTime * 2;
   
        //Se mueve
        controller.Move(motion * Time.deltaTime);

 
Si no notan la diferencia, al final quite el ultimo "else". El problema era que como la "Gravedad" no se activaba por completo al aterrizar, no acababa de "aterrizar" correctamente.

Marzo 01, 2018, 10:45:43 PM #3 Ultima modificación: Marzo 01, 2018, 10:46:52 PM por Adrianete
lo primero que deberías hacer cuando te pasen estas cosas es averiguar si el fallo esta realmente en el script, como dice lightbug llénalo de Debug.Log("falloRandom"); 

Etiquetas: