problem with vector3.right and up

I'm trying to use this code to have the "s" key move the player down and the "d" key move the player to the right:

var number:float=0;

function Update() {

HorizontalTranslate("d",1,5,8,Vector3.right);
HorizontalTranslate("s",-1,5,8,Vector3.up);
}

function HorizontalTranslate(input,value,damp,speed,direction){
var hvalue=0;
 if(Input.GetKey(input))
 {
   hvalue =hvalue+value;
 }

number = Mathf.Lerp(number, hvalue, Time.deltaTime*damp);

transform.Translate(direction * number*Time.deltaTime*speed, Space.Self);
}

problem is that when I press the keys the object moves diagonally rather than straight to the right or down. My guess is that somehow both Vector3.up and Vector3.right are being called at the same time, but i'm not quite sure why it's doing it. Any ideas how to fix this? thanks.

It's doing that because you're pressing both keys.

You need an if-else in there to prevent checking one if the other is pressed, or you need to cancel the other direction of movement by storing a "desired movement" and only allowing one axis of that movement to be non-zero.

if you place this script on the object you want to move if will do as you want and s=down, d=right:

function Update () {

//moves down when s is pressed/held

if (Input.GetKey (KeyCode.S))
    transform.Translate(0, -1, 0);

//moves right when d is pressed/held

if (Input.GetKey (KeyCode.D))
    transform.Translate(0, 0, 1);

}