Rigidbody2D moving WAY to fast


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;