Вот полная функция:
у переехать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 устранил обе проблемы.