Vector2.Lerp, two almost identical approaches produce different results

Good evening!
I use this to lerp an UI object, a child of Canvas, to an anchored target position on the same canvas:

  1. Works smoothly and the lerpDuration is correct.
   private IEnumerator MoveRectTransformToTarget(RectTransform rectTransformToMove, Vector2 posTarget, float lerpDuration)
    {
        Vector2 a, b;
        a = rectTransformToMove.anchoredPosition;
        b = posTarget;

        float timeElapsed = 0;
        while (timeElapsed < lerpDuration)
        {
            timeElapsed += Time.deltaTime;
            rectTransformToMove.anchoredPosition = Vector2.Lerp(a, b, timeElapsed / lerpDuration);
            if (Vector2.Distance(rectTransformToMove.anchoredPosition, posTarget) < 1.0f)
            {
                rectTransformToMove.anchoredPosition = posTarget;
                yield break;
            }
            yield return null;
        }

    }
  1. Works but glitches, moves faster than expected and when build to mobile device, even laggy movement.
    private IEnumerator MoveRectTransformToTarget(RectTransform rectTransformToMove, Vector2 posTarget, float lerpDuration)
    {
        Vector2 b;
        b = posTarget;

        float timeElapsed = 0;
        while (timeElapsed < lerpDuration)
        {
            timeElapsed += Time.deltaTime;
            rectTransformToMove.anchoredPosition = Vector2.Lerp(rectTransformToMove.anchoredPosition, b, timeElapsed / lerpDuration);
            if (Vector2.Distance(rectTransformToMove.anchoredPosition, posTarget) < 1.0f)
            {
                rectTransformToMove.anchoredPosition = posTarget;
                yield break;
            }
            yield return null;
        }

    }

Well, they’re obviously going to be different, the first one uses the anchoredPosition you get from the Start, and the second one uses the new anchoredPosition every time. Of course they’re going to produce different results.

1 Like

Yes ! :smile:

Got confused because unity docs approach was the 2)

https://docs.unity3d.com/ScriptReference/Vector2.Lerp.html