- Home /
Problem with jumping in fps game
I am making a fps game. Problem is that if the player jumps and and movement force is applied towards another game object then the player will remain in air till the force is removed from that direction. Also player falls slowly and is not giving realistic feeling of jump. My code is
void Move(float horizontal, float vertical)
{
Vector3 movement = new Vector3 (vertical, 0.0f, -horizontal);
rigidBody.AddRelativeForce (movement * speed * Time.fixedDeltaTime);
rigidBody.velocity = Vector3.ClampMagnitude (rigidBody.velocity, maxSpeed);
}
void Jump()
{
if(Input.GetKeyDown("space"))
{
rigidBody.AddRelativeForce(Vector3.up * jumpSpeed * Time.fixedDeltaTime);
}
}
Answer by siaran · Mar 29, 2015 at 10:51 AM
Looks like you need some kind of check that your player is grounded before you jump.
Also you set your rigidbody's velocity to something that's clamped to maxSpeed, but you do not want that when falling - I can fall much faster than I can run. Also keep in mind that when you are falling, you should be accelerating.
I implemented the acceleration downward like this
if (rigidBody.velocity.y < 0 && !IsGrounded())
{
rigidBody.AddForce (Vector3.down * fallSpeed * Time.fixedDeltaTime);
}
It looks somewhats ok when player is standing but creates same problem when moving into another object like wall. Also it isn't quite good when player is moving, it get back to surface very quickly.
And I couldn't find a way around the Clamp$$anonymous$$agnitude. I tried clamping a and z directions of velocity but it behaves awkwardly
Your answer
Follow this Question
Related Questions
Rigidbody player keeps moving after AddForce has stopped? 3 Answers
How does instantiate connect to rigidbody?,How does instantiate userigidbody without getcomponent? 1 Answer
Distribute terrain in zones 3 Answers
How can I pragmatically move a navmesh rigid body when changing scenes? 0 Answers
Object drag not moving at the same rate as the pointer 1 Answer