es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Persona saltando con rigidbody

Estoy intentando hacer un movimiento simple de jugador en primera persona con rigid body. El código a continuación funciona para moverse con las teclas WASD, pero para saltar es un poco extraño. Cuando presiono la barra espaciadora, el personaje salta muy poco y de forma brusca. Supongo que hay algo mal con la función Move() porque si comento esa parte, el salto funciona bien.

public LayerMask groundMask;
public Transform groundCheck;
public Rigidbody rb;
[Space]
public float speed;
public float jump;

private float x;
private float z;

private void Update()
{
    Move();
    Jump();
}

void Move()
{
    x = Input.GetAxis("Horizontal");
    z = Input.GetAxis("Vertical");
    Vector3 move = (transform.right * x + transform.forward * z) * speed * Time.deltaTime;
    rb.velocity = move;
}

void Jump()
{
    if (Input.GetKeyDown(KeyCode.Space) && IsGrounded())
    {
        rb.AddForce(Vector3.up * jump, ForceMode.Impulse);
    }
}

bool IsGrounded()
{
    return Physics.CheckSphere(groundCheck.position, 0.1f, groundMask);
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con los saltos podría deberse al hecho de que la velocidad aún se aplica cuando el jugador salta. Esto puede causar un movimiento brusco cuando la fuerza se aplica además de la velocidad actual. Una forma de solucionar esto sería establecer la velocidad del eje y en cero antes de aplicar la fuerza de salto. La función Jump() actualizada se vería así:

    void Jump()
    {
        if (Input.GetKeyDown(KeyCode.Space) && IsGrounded())
        {
            rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
            rb.AddForce(Vector3.up * jump, ForceMode.Impulse);
        }
    }
    

    Esto establece el eje y de la velocidad en cero antes de aplicar la fuerza de salto, evitando cambios repentinos en el movimiento.

Comments are closed.