Tile Movements

Hello everybody. I’m new to the community and I’m new to C#, i got a problem.
I’m trying to write down a script able to make my player walks on a grid.
I saw the gridMove on the Unify Wiki but it’s not what I’m looking for, so I’m trying by myself.
Here what I’ve been doing:

using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour {
    private float MoveSpeed = 1.2f;
    private float GridSize = 18f;

    // Update is called once per frame
    void Update () {

        //Player Rotation
        if (Input.GetKeyDown (KeyCode.UpArrow)) {
            transform.forward = new Vector3 (0,0,-1);
        }
        else if (Input.GetKeyDown (KeyCode.DownArrow)) {
            transform.forward = new Vector3 (0,0,1);
        }
        else if (Input.GetKeyDown (KeyCode.RightArrow)) {
            transform.forward = new Vector3 (-1,0,0);
        }
        else if (Input.GetKeyDown (KeyCode.LeftArrow)) {
            transform.forward = new Vector3 (1,0,0);
        }

        //Player translation
        if (Input.GetKey (KeyCode.UpArrow)) {
            transform.Translate (Vector3.back *GridSize, Space.Self);
        }
        else if (Input.GetKey (KeyCode.DownArrow)) {
            transform.Translate (Vector3.back * GridSize, Space.Self);
        }
        else if (Input.GetKey (KeyCode.LeftArrow)) {
            transform.Translate (Vector3.back * GridSize, Space.Self);
        }

        else if (Input.GetKey (KeyCode.RightArrow)) {
            transform.Translate (Vector3.back * GridSize, Space.Self);
        }
    }

The player moves perfectly on the grid wich size is 18, but it does with an elevate speed.
I setted a MoveSpeed value, but i don’t know how to use it in the script to regulate the player movements. As I said before, I’m new to C#, can someone Help me?
The game I’m working on it’s a Pokèmon FanGame with a 3D style, similiar to the last ones from Game Freak.

What this script will do is basically move the player as if the player were moving on tiles only. Think of like a dungeon crawler or something similar to old style RPG’s. In order to get your pokemon fan game going, you’re going to have to do continuous movements but only only the X and Y axis’s, but only 1 at a given time.

You are also translate the character back multiple times in the same direction with different key strokes?

Try something like:

 // We can remove GridSize because it's not really a "Grid" movement.
// We use GetKey() instead of GetKeyDown() because we want to run the state WHILE the key is pressed.
if (Input.GetKey(KeyCode.W)) {
    transform.Translate(Vector3.forward * Time.deltaTime, Space.self);
}
// You can also use these for the other directions:
// Vector3.back;
// Vector3.right;
// Vector3.left;

Yes, with different keys it translates always back but the trick is in the rotation.
The player, before moving, face the direction so, once it’s looking right, for example, i can’t make it move right, but I need to set “back” (due to the mesh align) to make it move in that direction.
I tried “time.deltatime” but he doesn’t move tile by tile. It’s like he moves pixel by pixel. I use an entire mesh as map made in Blender, and i build it with a grid made of block which size is 18. Like it was a fake tile mapping.
As i said, the problem isn’t the moving, but the speed. if i write:

transform.Translate (Vector3.back * GridSize * MoveSpeed, Space.Self)

It doesn’t walk following the grid and if I just write:

transform.Translate (Vector3.back *GridSize, Space.Self)

It follows the grid, but make more than one step due to the speed.

I used “getkeydown” only in “transform.forward” 'cause in a typical pokèmon game, by pressing the arrow once time, the player just face the direction but doesn’t move, if you keep pressing instead, the player move. I’m trying to recreate this effect but i can’t…