Hi. I have some code for my 2d character (in class ofc):
void Update ()
{
if(Input.GetKeyDown("down"))
{
transform.Translate(Vector3.forward * 1);
}
}
Character (plane with transparent texture) is in position 0,0,0 and rotation 0,180,0 (this rotation for texture). When I click down arrow character change position z (what I want) and x (little but change). What is wrong?
What you have written I think does exactly what you are asking. When you press the down arrow key, the object moves forward. transform.Translate moves something in the direction of the vector you are giving it, based on the facing of the object. So. Vector3.forward is the direction that the object is facing. (Of course we are all confused as to why down is forward, but it’s your game)
Also, make some use of Time.deltaTime and variable speeds. It will help you out in the long run. 
float speed=1.0;
void Update ()
{
if(Input.GetKeyDown("down"))
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
Edit: Oh, GetKeyDown fires only when the key is pressed. GetKey fires the whole time the key is down.
About forward as down: I use top view with camera (orthographic) x rotate 90 and when I use y rotate 180 for plane (character) to good texture view (I don’t know why texture is upside-down) that forward it’s “down”.
Your code (with GetKey and GetKeyDown) gives this same result, but when (with all 3 codes) I change character y rotate to 0 that all is ok (only change z).