# How can I make something move without floating after I release the move key?

I’m new to Unity 5 and I’ve been trying to make a first project which is basically PONG,
I got to the part where I want the player to move up when I press W, but the movement is floaty- the player continues to move abit after I release W.

``````	public KeyCode moveUp;
public KeyCode moveDown;
Vector2 movespeed = new Vector2 ();
private Rigidbody2D rb;

void Start()
{
movespeed.x = 0;
rb = GetComponent<Rigidbody2D> ();

}
void Update ()
{
if (Input.GetKey (moveUp)) {
movespeed.y = 10;
}

else if (Input.GetKey (moveDown)) {
movespeed.y = -10;
}
else
{
movespeed.y = 0;
}
}
``````

I tried accessing the velocity of RigidBody2D:

``````rb.velocity.y = 10;
``````

But it seems to work only in Unity 4.

Is there any way to make the object stop when releasing the move key?

rb.velocity.y = 10;
This is a C# issue, it won’t work in Unity 4 either. Velocity is a Vector2 value-type so you cannot set an individual component of it. When accessing it, you get a copy of the value-type (they are passed by-value).

To do this, you need to set the velocity to a whole new Vector2 like so:

``````rb.velocity = new Vector2 (rb.velocity.x, 10.0f);
``````

This is how C# works:

• rb.velocity (returns a copy of the
velocity Vector2)
• rb.velocity.y = 10 (sets the Y of the
copy of the velocity Vector2)

If you want to zero the velocity then you’d do this:

``````rb.velocity = new Vector2.zero;
``````

Note that by applying force in the ‘Update’ callback, you’re doing it per-frame therefore you’ll get different forces and speeds depending on the frame-rate. You should do this in the ‘FixedUpdate’ callback.

Set rigidbody to `kinematic = true` when you want to make it stop completely.

Don’t forget to switch to `kinematic = false` when you move it again