Rigid Body Wait

I’m using the below code to add force to my character so he can jump:

rigidbody.AddForce (Vector3.up * 50);

…but I want the “AddForce” to only last for a split second so it simulates my character jumping. I tried adding a “Sleep” command after the “AddForce”:

rigidbody.AddForce (Vector3.up * 50);
rigidbody.Sleep();

…but it cancelled out the jump altogether. Maybe it’s because I’m using the wrong input? Currently it’s set to “GetKey”. I tried “GetKeyDown” but that made him not jump at all. See below:

else if (Input.GetKey("space"))
        {
            state = WalkingState.JumpUp;

Please help if you can. Thank you so much!

velketor

You add a force. A force results in an acceleration based on the mass. Acceleration always happens over time. Just think about a car. When you step on the accelerator the car starts accelerating, but you want reach 100 Km/h immediately :wink:

The good thing about games or simulated things is we don’t have to stick to the real world. What you need is an instant velocity change that is applied in one frame.

You can use

rigidbody.AddForce(Vector3.up*2, ForceMode.VelocityChange);

or just

rigidbody.velocity += Vector3.up*2;

Which should be the same.

for more information see the ForceMode page and maybe on wikipedia Force or Acceleration. I’ve tried to find some simpler sites, but couldn’t find any…

edit:
As shortly mentioned, you would apply this velocity change only one time per jump, so you should use GetKeyDown instead of GetKey