Why is my Mathf.Lerp not lasting for the intended duration, even though I'm not using Time.time as the t variable?

I just figured this out myself but hadn’t found a direct answer here so I thought I’d share for other people making the same mistake. I’ll post the answer myself if it gets approved in the moderation queue.

Why is my Lerp not lasting the intended duration?

using UnityEngine;
using System.Collections;

public class TestingLerpScript : MonoBehaviour {

	void Start(){
		StartCoroutine(LerpCoroutine(10f, 5f, 0.05f));
	}
	

	IEnumerator LerpCoroutine(float finalX, float duration, float marginOfError){

		Debug.Log (duration);

		float startTime = Time.time;
		float currentX = 0f;

		while( (currentX != finalX) && (Mathf.Abs(finalX-currentX))>marginOfError)
		{
			float localTime = Time.time-Time.deltaTime - startTime;
			float percentCovered = localTime/duration;

			currentX = Mathf.Lerp (currentX, finalX, percentCovered);

			yield return null;
		}

		Debug.Log(Time.time-startTime);
		
	}
}

Thank You.

The problem is you’re using currentX as a starting position each time the Lerp is called, but the starting position should remain the same. This is what it should be instead:

       float startTime = Time.time;
		float startX = 0f;
		float currentX = startX;

		while( (currentX != finalX) && (Mathf.Abs(finalX-currentX))>marginOfError)
		{
			float localTime = Time.time-Time.deltaTime - startTime;
			float percentCovered = localTime/duration;

            //currentX = Mathf.Lerp (currentX, finalX, percentCovered);
			currentX = Mathf.Lerp (startX, finalX, percentCovered);

			yield return null;
		}