Utilice MoveTowards con duración en lugar de velocidad
Quiero moverme GameObject de la posición A a la B conVector3.MoveTowards
dentro de x segundos y en una función de rutina. Sé cómo hacer esto conVector3.Lerp
pero esta vez preferiría hacerlo conVector3.MoveTowards
ya que ambas funciones se comportan de manera diferente.
ConVector3.Lerp
, esto se hace comoest:
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;
}
}
Intenté hacer lo mismo conVector3.MoveTowards
, pero no funciona correctamente. El problema es que el movimiento termina antes del tiempo o duración x. Además, no se mueve suavemente. Salta al centro de ambas posiciones que al final de la posición B.
Esta es la función que usaVector3.MoveTowards
con el problema anterior:
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;
}
}
¿Cómo mueves GameObject de la posición A a la B conVector3.MoveTowards
dentro de x segundos y en una función de rutina?
Por favor no sugieraVector3.Lerp
ya que eso no es lo que quiero usar.
EDITA:
Reemplazando
float time = Vector3.Distance(currentPos, toPosition) / duration;
co
float time = Vector3.Distance(startPos, toPosition) / (duration * 60f);
works pero presenta un problema cuando el foco se cambia de Unity a otra aplicación. Hacer eso hace que el movimiento no termine. Calcularlo cada fotograma en lugar de una vez antes de iniciar el temporizador parece más razonable.
a respuesta de MatrixTai solucionó ambos problemas.