Use MoveTowards com duração em vez de velocidade

Eu quero me mudarGameObject da posição A a B comVector3.MoveTowards dentro de x segundos e em uma função de rotina. Eu sei como fazer isso comVector3.Lerp mas desta vez preferiria fazê-lo comVector3.MoveTowards já que ambas as funções se comportam de maneira diferente.

ComVector3.Lerp, isso é feito comoesta:

IEnumerator moveToX(Transform fromPosition, Vector3 toPosition, float duration)
{
    float counter = 0;

    //Get the current position of the object to be moved
    Vector3 startPos = fromPosition.position;

    while (counter < duration)
    {
        counter += Time.deltaTime;
        fromPosition.position = Vector3.Lerp(startPos, toPosition, counter / duration);
        yield return null;
    }
}

Eu tentei fazer a mesma coisa comVector3.MoveTowards, mas não está funcionando corretamente. O problema é que a movimentação termina antes do x tempo ou duração. Além disso, ele não se move sem problemas. Salta para o meio de ambas as posições do que para o final da posição B.

Esta é a função que usaVector3.MoveTowards&nbsp;com o problema acima:

IEnumerator MoveTowards(Transform objectToMove, Vector3 toPosition, float duration)
{
    float counter = 0;

    while (counter < duration)
    {
        counter += Time.deltaTime;
        Vector3 currentPos = objectToMove.position;
        float time = Vector3.Distance(currentPos, toPosition) / duration;

        objectToMove.position = Vector3.MoveTowards(currentPos, toPosition,
         time);

        Debug.Log(counter + " / " + duration);
        yield return null;
    }
}

Como você move o GameObject da posição A para B comVector3.MoveTowards&nbsp;dentro de x segundos e em uma função de rotina?

Por favor, não sugiraVector3.Lerp&nbsp;como não é isso que eu quero usar.

EDITAR:

Substituindo

float time = Vector3.Distance(currentPos, toPosition) / duration;

com

float time = Vector3.Distance(startPos, toPosition) / (duration * 60f);

funciona, mas apresenta um problema quando o foco é transferido do Unity para outro aplicativo. Isso faz com que o movimento não termine. Calculá-lo a cada quadro, em vez de uma vez antes de iniciar o timer, parece mais razoável.

A resposta da MatrixTai corrigiu os dois problemas.