x


Jump without character controller??

Hi,

I'm trying to make my car (no wheels or anything fancy, it's just a box with colliders and a rigid body) jump so that it can jump over obstacles. The problem is I can't seem to get it to work correctly, all the other answers on here use character controllers (which will not work for me).

Could someone please help me figure this out with just a rigid body?

This is what I have:

var jumpForce : float = 5;

function Update () {
    if(Input.GetButton("Vertical")){
       rigidbody.AddForce(Vector3.up * jumpForce);
    }
}

But this will continously add force to my car for as long as the up arrow is pressed, I wan't it to reach a max height and then stop adding the force.

Thanks a lot! :D

more ▼

asked Feb 21 '12 at 10:26 AM

stuthemoo gravatar image

stuthemoo
61 9 10 11

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

First, use GetButtonDown instead of GetButton, that will happen only return true once, when the user presses the button instead of continuously returning true as long as the button is held down.

Second, add a bool to check if the user is in the air or on the ground so you won't be able to continue adding force up when in mid-air.

more ▼

answered Feb 21 '12 at 02:41 PM

asafsitner gravatar image

asafsitner
2.4k 2 8 19

Thanks, I'm doing this:

function carIsGrounded() { var hit : RaycastHit; if (Physics.Raycast (transform.position, -Vector3.up, hit)) { var ground = hit.distance; if(ground < 2.1) return true; } }

By checking if the distance is less than 2.1 I know the car is grounded but it seems like it's not the best method, is there a better way?

Feb 21 '12 at 08:30 PM stuthemoo
(comments are locked)
10|3000 characters needed characters left

Or if you want to allow the user to have the option of keeping the button pressed to determine the height of the jump, do something like this:

var jumpTimer : float; // in seconds
var maxJumpTime : float = 2; // in seconds
function Update () {
  if(carIsGrounded()) { // you have to implement this one yourself, eg with a Raycast
    jumpTimer = 0;
  }
  if(Input.GetButton("Vertical") && jumpTimer < maxJumpTime) {
    jumpTimer += Time.deltaTime;
    rigidbody.AddForce(Vector3.up * jumpForce);
  }

(since links don't work inside code sigh : Raycast)

(didn't actually tested the code, sry)

hope thats helps

more ▼

answered Feb 21 '12 at 03:51 PM

ZweiD gravatar image

ZweiD
51 1 2 3

Thanks a lot man, I was trying to do something similar just now, but yours is a much neater way. Please have a look at my comment on asafsitner's answer.

Feb 21 '12 at 08:32 PM stuthemoo
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x1793
x335
x292

asked: Feb 21 '12 at 10:26 AM

Seen: 876 times

Last Updated: Feb 21 '12 at 08:32 PM