Simple lerp roation problem

For a game i am making i need the character to be able to turn on the y axis to point forward, right, backward, and left. To do this i am using Mathf.Lerp with if statements to allow me to change the direction to these simple four directions. whenever i do this though, the characted will only point forward (0 degrees)or backward (180 degrees), can someone tell me where I went wrong, here is the script.

#pragma strict

function Start () {

}

function Update () {

if(Input.GetKeyUp(KeyCode.UpArrow)){

	transform.rotation.y=Mathf.Lerp(transform.rotation.y,0,Time.time);

};//endif

if(Input.GetKeyUp(KeyCode.RightArrow)){

	transform.rotation.y=Mathf.Lerp(transform.rotation.y,90,Time.time);
    

};//endif

if(Input.GetKeyUp(KeyCode.DownArrow)){

	transform.rotation.y=Mathf.Lerp(transform.rotation.y,180,Time.time);
};//endif

if(Input.GetKeyUp(KeyCode.LeftArrow)){

	transform.rotation.y=Mathf.Lerp(transform.rotation.y,270,Time.time);
};//endif
}

This is a recurrent problem: transform.rotation is a quaternion, and you should not change its components directly unless you know exactly what you’re doing. You should use transform.eulerAngles instead: this property is what you can see in the Rotation field, in the Inspector.

But there’s another problem: with this Lerp code, the object will always rotate instantaneously to the target angle (the Lerp example in the docs sucks!)

To solve both problems, you could have two variables: curAngle and destAngle; each Update, curAngle Lerp’s to destAngle, and is copied to the object rotation; when a key is pressed, set the destAngle:

private var curAngle: float;
private var destAngle: float = 0;

function Update () {
  if(Input.GetKeyUp(KeyCode.UpArrow)){
    destAngle = 0;    
  }
  if(Input.GetKeyUp(KeyCode.RightArrow)){
    destAngle = 90;
  }
  if(Input.GetKeyUp(KeyCode.DownArrow)){
    destAngle = 180;
  }
  if(Input.GetKeyUp(KeyCode.LeftArrow)){
    destAngle = 270;
  }
  // choose the shortest distance:
  var dif = destAngle - curAngle;
  if (dif > 180) curAngle += 360;
  if (dif < -180) curAngle -= 360;
  // lerp curAngle to the destAngle each Update:
  curAngle = Mathf.Lerp(curAngle, destAngle, Time.deltaTime);
  // copy curAngle to the object Y angle:
  transform.eulerAngles = Vector3(0, curAngle, 0);
}