x


Vehicle setup - driving slopes

Hi there,

I got this wee script that does most of the vehicle driving job rather well. However, when I am trying to drive a steep (not too steep really) slope, the engine shuts down (as intended). But when I power it on again, I just can't climb up - my vehicle rolls down on wheels.

float acc;
    if ((Input.GetAxis("Vertical") > 0.1f) || (Input.GetAxis("Vertical") < -0.1f))
    {
       acc = Input.GetAxis("Vertical");
    }
    else
    {
       var localVelocity = transform.InverseTransformDirection(rigidbody.velocity);
       if (localVelocity.z > 0.05)
       {
         acc = -3f;
       }
       else if (localVelocity.z < -0.05)
       {
         acc = 3f;
       }
       else
       {
         acc = 0;
       }

    }

I tried something rather crude, a key binding to increase the acceleration - but its not exactly what I am looking for - once used, it will just shoot the vehicle forward - and a subsequent jump over the edge of the slope. What I am really looking for is a steady speed, slowly rolling the slope. I am using the wasd keys - and when I hit the critical point I want to use the shift like a really basic gearbox. Maybe I should look into motor torque instead (I did so with about the same results) or forward friction - if tat's even a variable accessible in script?

more ▼

asked Nov 15 '11 at 06:31 PM

Airship Games gravatar image

Airship Games
257 49 69 86

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

1 answer: sort voted first

This seems to work well but I can't figure out how to drive backwards now. Stuck. But so far it's doing precisely what I needed. As soon as the angle of attack increases I use a secondary key to change gears (fake gearbox) and as soon the slope ends, I get back to the initial speed and the vehicle won't just jump over the edge.

         rigidbody.drag = rigidbody.velocity.magnitude / 1000;

         float angle = 0.0f;

           Vector3 axis = Vector3.zero;

           rigidbody.rotation.ToAngleAxis(out angle, out axis);

             float _x_angle = Mathf.Abs(angle*axis.x);

         _x_angle = Mathf.Clamp( _x_angle, 0f, 10f);

         acc = Mathf.Lerp(accSlope, accAngle, _x_angle/10f );
more ▼

answered Nov 21 '11 at 02:19 PM

Airship Games gravatar image

Airship Games
257 49 69 86

(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:

x418
x101
x50
x1
x1

asked: Nov 15 '11 at 06:31 PM

Seen: 710 times

Last Updated: Nov 21 '11 at 02:21 PM