An alternative approach to the same problem.
var velocity = 3.0;
var minXAngle : float = -45;
var maxXAngle : float = 45;
var minZAngle : float = -45;
var maxZAngle : float = 45;
private var xAngle : float = 0.5f;
private var zAngle : float = 0.5f;
function Update () {
var vdt = velocity * Time.deltaTime;
var xtrans = Input.GetAxis("Horizontal") * vdt;
var ytrans = Input.GetAxis("Vertical") * vdt;
var ztrans = Input.GetAxis("Fire1") * vdt;
transform.Translate(-ytrans, ztrans, xtrans, Space.World);
Rotate(xtrans, ytrans);
}
function Rotate (x : float, z : float) {
xAngle = Mathf.Clamp01(xAngle + x);
zAngle = Mathf.Clamp01(zAngle + z);
var euler = transform.eulerAngles;
euler.x = Mathf.Lerp(minXAngle, maxXAngle, xAngle);
euler.z = Mathf.Lerp(minZAngle, maxZAngle, zAngle);
transform.eulerAngles = euler;
}