Вот полная функция:

у переехатьGameObject из положения А в В сVector3.MoveTowards в течение х секунд и в функции сопрограммы. Я знаю как это сделать сVector3.Lerp но на этот раз предпочел бы сделать это сVector3.MoveTowards поскольку обе функции ведут себя по-разному.

С участиемVector3.Lerpэто делается какэто:

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;
    }
}

Я пытался сделать то же самое сVector3.MoveTowards, но это не работает должным образом. Проблема в том, что движение заканчивается раньше, чем время или продолжительность. Кроме того, он не движется плавно. Он прыгает на середину обеих позиций, чем на конец позиции B.

Это функция, которая используетVector3.MoveTowards с проблемой выше:

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;
    }
}

Как вы перемещаете GameObject из положения A в B сVector3.MoveTowards в течение х секунд и в функции сопрограммы?

Пожалуйста, не предлагайтеVector3.Lerp поскольку это не то, что я хочу использовать.

РЕДАКТИРОВАТЬ:

Замена

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

с участием

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

работает, но создает проблему, когда фокус переносится с Unity на другое приложение. Это приводит к тому, что движение не заканчивается. Вычислять его каждый кадр вместо одного раза перед запуском таймера кажется более разумным.

Ответ MatrixTai устранил обе проблемы.

Ответы на вопрос(0)

Ваш ответ на вопрос