# Space movement script

I made this 2D script that makes basic “space” movement, with rigidbody set to 0 gravity.
#pragma strict

``````var speed = 10;

function Start () {

}

function Update () {

if(Input.GetKey(KeyCode.LeftArrow)) {
}

if(Input.GetKey(KeyCode.UpArrow)) {
}

if(Input.GetKey(KeyCode.RightArrow)) {
}

if(Input.GetKey(KeyCode.DownArrow)) {
}

}
``````

It works fine, but the problem is that there is no maximum speed. If you hold one of the arrow keys, it will just keep accelerating. So i want a new script that does the same as this one (try it out in a scene, with all rigidbody variables set to 0, and mass to 3) Where i can make maximum speed.

Ask me all the questions you have, if you dont understand what i mean, or need more info.

Maybe take a look at this question: How to limit “Force” speed (cumulative) without limiting Force

``````rigidbody2D.AddForce (Vector3.up * speed);
rigidbody2D.velocity = Vector2.ClampMagnitude(rigidbody2D.velocity, speedLimit);
``````

*Warning: I havent actually tested this myself so you might not be able to copy and paste this.

Speed is the magnitude of the direction vector.
SO speed is

``````rigidbody.velocity.mangnitude
``````

If you want to see if your speed is greater then N you would say

``````if (rigid body.velocity.magnitude>N){
//do smoething
}
``````

Now, a normalized vector is a vector with a magnitude of 1. SO velocity in your current direction with a speed of 1 is

``````rigidbody.velocity.nomalized
``````

If you multiply a normalized vector with a single value (a Scalar, in math terms) you get a vector in the direction of the normalized vector at the magnitude of the Scalar.

SO… putting that all together. To make sure you go no faster the N you say…

``````if (rigid body.velocity.magnitude>N){
rigidbody.velocity = rigibody.velocity.normalized * N;
}
``````

Notes:

(1) This is for 3D use the appropriate 2D structures instead for 2D

(2) This code uses magnitude to check distance not magnitude-squared for clarity. In most systems magnitude-squared would be more efficient, however other people’s test of Unity have suggested that vector magnitude is cached in such a way that there is no speed loss for using it instead.