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)) {
rigidbody2D.AddForce (Vector3.left * speed);
}

if(Input.GetKey(KeyCode.UpArrow)) {
rigidbody2D.AddForce (Vector3.up * speed);
}


if(Input.GetKey(KeyCode.RightArrow)) {
rigidbody2D.AddForce (Vector3.right * speed);
}


if(Input.GetKey(KeyCode.DownArrow)) {
rigidbody2D.AddForce (Vector3.down * speed);
}







}

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

Basically just add a Mathf.Clamp after you AddForce.

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.