# Rigidbody2D moving WAY to fast

Hello,

I am at the very beginning of developing my top-down 2D game in Unity. Attached to my simple sprite is a 2D box collider and a 2D rigidbody. The rigidbody has a gravity scale of 0 and rotation disable - admittedly, the only reason I am using the rigidbody is for collision detection. I am using the below code which is allowing me to move in somewhat of a grid pattern only - no diaganol movement:

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

public class CharacterController2D : MonoBehaviour {

public float speed = 1.0f;

private Rigidbody2D rb2D;

void Start () {

rb2D = GetComponent<Rigidbody2D> ();

}

void FixedUpdate(){

if (Input.GetKey(KeyCode.D) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.right;
}
else if (Input.GetKey(KeyCode.A) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.left;
}
else if (Input.GetKey(KeyCode.W) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.up;
}
else if (Input.GetKey(KeyCode.S) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.down;
}

rb2D.transform.position = Vector3.MoveTowards(rb2D.transform.position, rb2D.transform.position, speed * Time.deltaTime);

}

}
``````

The immediate issue is that my sprite is just cruising! I have the speed at .025 in the inspector and he is still moving way to fast. I have tried adjusting the velocity of the rigidbody. I have googled the issue. I cannot find anything helpful.

I just want the sprite moving at a reasonable speed.

Hi, do you only want Up, down, left & right movement? or do you want the ability to move in any direction with a combination of input?

If you are okay with the latter, you could use something like this:

``````    public float moveSpeed;

private Vector3 movement;

public Rigidbody2D rigidBody;
public bool playerIsMoving = false;

// Use this for initialization
void Start()
{
rigidBody = GetComponent<Rigidbody2D>();
}

void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal") * Time.deltaTime * moveSpeed;
float v = Input.GetAxisRaw("Vertical") * Time.deltaTime * moveSpeed;
Move(h, v);
}

public void Move(float h, float v)
{
movement.Set(h, v, 0f);
rigidBody.MovePosition(transform.position + movement);
movement = movement.normalized * moveSpeed * Time.deltaTime;
``````