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);
}
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í:
Esto establece el eje y de la velocidad en cero antes de aplicar la fuerza de salto, evitando cambios repentinos en el movimiento.