# Accelerate

How do I make it so that for each second a rigidbody is moving, it’s speed is incremented by 1?
And when no buttons are being pressed, it decrements the speed by 1 each second?
So far I have this, which is not working properly.

EDIT: When I press W i want it to each it’s maximum speed in 10 seconds, then when i let go of W it will decrement it’s speed down to 0 in 10 seconds, so that it is standing still.
ALSO, if i was going in a direction when holding A, then let go of A and immediately press D, how do I make it so that the velocity doesn’t get slowed down after switching directions? (If it has to, as minimal as possible?).

``````using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour {
Rigidbody rb;

public Vector3 velocity;

public float speed;

float maxSpeed = 10f;
float acceleration = 1f;
void Start () {
rb = GetComponent<Rigidbody> ();
speed = 1f;

}

void FixedUpdate () {
velocity = rb.velocity;
float h = Input.GetAxis ("Horizontal");
float v = Input.GetAxis ("Vertical");

Vector3 movement = new Vector3 (h, 0.0f, v);

rb.AddForce (movement * speed);

if (h != 0 || v != 0) {
Accelerate ();
}

if (h == 0 && v == 0) {
Decelerate ();
}

}

void Accelerate() {
speed += acceleration * Time.deltaTime;
speed = Mathf.Clamp (speed, 1, maxSpeed);
transform.Translate (speed * Time.deltaTime, 0, 0, Space.World);
}

void Decelerate() {
speed -= acceleration * Time.deltaTime;
speed = Mathf.Clamp (speed, 1, maxSpeed);
transform.Translate (speed * Time.deltaTime, 0, 0, Space.World);
}
}
``````

I would just get the key and use Time.deltaTime to increase the speed and use else to decease the speed.

``````psudo-code:

public float speed;
public float time;

If(Input.GetKey(keycode.Space)){

time += speed * Time.deltaTime;

}else{time -= speed * Time.deltaTime;}
``````