2D Top Down Movement Control Help.

Hey, some background.

I’m trying to make some sort of 2D Final Fantasy VI/Valkyria Chronicles mash and I am currently trying to get the former part in a workable state. I’ve got my test sprite to move at a fixed rate but I have some problems.

At the moment they move like some of the classic Ultima games, where it just snaps in position without some sort of fixed speed animation in between.

My second problem is that the movement doesn’t continue when the key is held down.

And my third problem is that there is no diagonal movement. I’ve tried some other movement controllers but they have acceleration and deceleration slopes when I press and let go of the key (something I can’t seem to find a solution to).

Any help since I am struggling to find these fairly specific solutions?

Current Character Controller.

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

	private Vector2 pos;
	private bool moving = false;

	void Start () {
		pos = transform.position;
	}

	void Update () {

		CheckInput ();

		if (moving) {
			transform.position = pos;
			moving = true;
		}
	}

	private void CheckInput() {

			if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) {
				pos += Vector2.right;
				moving = true;
			}

			else if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) {
				pos -= Vector2.right;
				moving = true;
			}

			else if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow)) {
				pos += Vector2.up;
				moving = true;
			}

			else if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow)) {
				pos -= Vector2.up;
				moving = true;
			}
		}
	
	}

void Update () {
transform.position += new Vector3(Input.GetAxis(“Horizontal”), Input.GetAxis(“Vertical”), 0f);
}