Lerp is linear, if t changes at a constant speed, so does the output.
Wrong-lerp is an application of lerp that produces smooth, yet imperfect movement towards a target value.

value = Mathf.Lerp(value, target, Time.deltaTime * speed);

Accompanied by such phrases like:

🤓 "Your using Lerp wrong."

This common hacky application easily creates smooth motion.


Vague is the takeaway from this usage.
If you don't need exact outcomes or durations and aren't too worried about differences across frame rates, applying lerp like this is a common creative way to smooth movement.


10fps20fps50fps100fps↑ Value00. →
value = Mathf.Lerp(value, 1, Time.deltaTime * 10);


Using a more complex t can solve frame rate dependency problems.

value = Mathf.Lerp(value, target, 1 - Mathf.Pow(fraction, Time.deltaTime));

Where fraction is a 0->1 factor that defines a percentage of smoothing. 0 gets you the target (no smoothing), 1 is the source (so smoothed it's useless).


10fps20fps50fps100fps↑ Value00. →
fraction = 0.3;
value = Mathf.Lerp(value, target, 1 - Mathf.Pow(fraction, Time.deltaTime * 10));


If you are concerned about any of the downsides, consider alternatives like:

Certain libraries will have their own tweening libraries built-in. For example, UI Toolkit has USS transitions.

Return to overview.