- Home /
Why can't I get AddForce or Velocity work?
I'm trying to get my character to jump in my game. It's a third person game, and although she will jump when I play the Jump animation, I want to be able to control her jump height so she can jump over stuff. Currently I've read about and tried using AddForce by writing lines like. My variables are
[SerializeField] private float jumpHeight = 10.0f;
[SerializeField] private Rigidbody rb;
rb.AddForce(0,jumpHeight,0, ForceMode.Force);
and
rb.AddForce(Vector3.up * jumpHeight * Time.deltaTime, ForceMode.Force);
Neither work, although I can log out a message when I press my jump key, so I know that's working. I've also tried adding velocity but that didn't work either.
rigidbody.velocity += Vector3.up * jumpHeight;
Everywhere I read makes it look like I'm writing it correctly, but my girl still isn't jumping. Could there be something else affecting the way the code should execute?
Answer by jjcrawley · Feb 25, 2017 at 08:14 AM
Maybe she is jumping. Have you tried checking her velocity after adding the force? Not straight away, but over several frames. Maybe in your update, debug that out and see. Another way to test is to whack the force up. Instead of 10 make it 300 and try again. Maybe it isn't enough force.
If that doesn't work then double check your implementation, you only want to apply the force once. If you are only applying the force when you push the button down, then it will only apply it, when you push the button down. Double check your input, to do it the way that you're doing it, would involve holding the button down.
If you want to do it that way, then you may need to extract your force logic into a co-routine and start that up each time you tap the jump button, or until you're grounded and push the jump button.
Answer by Bunny83 · Feb 25, 2017 at 12:38 AM
All three ways should work as long as:
Your object actually has a rigidbody attached.
You actually assign your rigidbody somewhere to your "rb" variable
Your rigidbody is not a kinematic rigidbody.
Your game is not paused (Time.timeScale > 0)
ps: your last line of code should be
rb.velocity += Vector3.up * jumpHeight;
as the "rigidbody" shortcut property has been deprecated long ago.
Your answer
Follow this Question
Related Questions
Countering AddForce by Modifying velocity 3 Answers
Why is velocity checking intensive? 0 Answers
Rigidbody Addforce cancels out Rigidbody velocity..maybe? 0 Answers
Gravitational pull without losing speed 1 Answer
Why does writing to rigidbody.velocity after AddForce stop my rigidbody moving? 4 Answers