- Home /
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
Answer by asafsitner · Feb 21, 2012 at 02:41 PM
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.
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?
Answer by ZweiD · Feb 21, 2012 at 03:51 PM
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
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.