I’m trying to get a gameObject to move smoothly to a certain position (defined in a Vector3 variable), and I’ve been told to use Vector3.Lerp. But, when I do, the object doesn’t move smoothly, it just moves to the target in one frame. Here is my code:

var start : Vector3;
var end : Vector3;
transform.position = Vector3.Lerp(start,end,Time.deltaTime);

The 3rd parameter of Lerp is a ratio from 0 to 1, where 0 means start, 1 means end.

So you’ll want to do something like this:

var lerpPosition : float = 0.0f;
var lerpTime : float = 5.0f; // This is the number of seconds the Lerp will take
var start : Vector3;
var end : Vector3;
function Update() {
lerpPosition += Time.deltaTime/lerpTime;
transform.position = Vector3.Lerp(start,end,lerpPosition);
}

So what’s happening here is that we start with a lerpPosition of 0 (putting our instance at start), and each frame we add a small amount to it. After a few seconds (5 in this example), lerpPosition will have increased to 1.0, putting our instance at end.

This way you can also easily tell that the Lerp is complete by testing if (lerpPosition >= 1.0f).

Vector3.Lerp does not make a smooth movement. It calculates a new vector in fraction between two vectors.
Imagine: you have start point with x=5 and finish point with x=10. So Lerp(5,10,0.5) returns 7.5 because the third parameter is 0.5 that is half of the way is passed; Lerp(5,10,1) returns 10 (the end of the way), Lerp(5,10,0) returns 0 and so on.
In your case you have to store fraction (the third parameter), increment it every frame and assign a new transform to your object every frame until fraction equals or greater that 1. After that you get the smooth movement.