Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Centauro5legs en Febrero 19, 2018, 03:41:36 AM

Título: [Ayuda] isGrounded no funciona
Publicado por: Centauro5legs en Febrero 19, 2018, 03:41:36 AM
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?
Título: [Ayuda] isGrounded no funciona
Publicado por: Null en Febrero 19, 2018, 04:49:56 AM
@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.
Título: [Ayuda] isGrounded no funciona
Publicado por: Centauro5legs en Febrero 19, 2018, 06:26:26 AM
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.
Título: [Ayuda] isGrounded no funciona
Publicado por: Adrianete en Marzo 01, 2018, 10:45:43 PM
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");