Interpolación lineal con Mathf.Lerp en Unity

Resumen

Mover un objeto de un punto A a un punto B sin saltos bruscos es uno de los problemas más comunes al programar en Unity, y la respuesta está en la interpolación lineal. Si trabajas con animaciones, transiciones de cámara o efectos visuales, dominar Mathf.Lerp te permite crear movimientos suaves y predecibles dentro de tus escenas.

¿Qué es una interpolación y por qué se usa Lerp en Unity?

Una interpolación es una transición progresiva entre dos valores. En lugar de hacer que un objeto aparezca instantáneamente en su destino, calculas los puntos intermedios para que el cambio se vea natural.

El método más conocido es Mathf.Lerp, donde Lerp es la abreviación de linear interpolation [0:24]. Se llama lineal porque si tienes una posición A y una posición B, el recorrido se traza en línea recta, no en zigzag ni en parábola.

¿Qué hace exactamente Mathf.Lerp? Recibe tres parámetros: el valor inicial A, el valor final B y un parámetro T que va de 0 a 1. Devuelve un número proporcional dentro de ese segmento.

¿Cómo se comporta el parámetro T en Lerp?

El tercer parámetro, llamado T, es la clave del método. Funciona como un porcentaje del recorrido entre A y B [1:08].

  • Si T es 0, el resultado es exactamente A.
  • Si T es 1, el resultado es exactamente B.
  • Si T es 0.25, obtienes el 25 % del segmento entre A y B.
  • Si T es menor que 0, el valor se queda anclado en A.
  • Si T es mayor que 1, el valor se queda anclado en B [1:25].

Este comportamiento de "clamp" automático es útil porque no necesitas validar manualmente que T esté dentro del rango.

¿Cómo se aplica Lerp para escalar un objeto en Unity?

Imagina una escena con una esfera y un cubo. Cuando el cubo se acerca a la esfera se vuelve más pequeño, y cuando se aleja crece hasta su tamaño máximo [2:14]. Ese efecto se logra con un script llamado LerpScale que combina distancia y escala.

El script define una distancia máxima (por ejemplo, 5 metros) y una escala máxima (3 metros). Cuando el cubo alcanza esa distancia, llega a su tamaño tope.

¿Cómo se calcula el valor de T a partir de la distancia?

El truco está en normalizar la distancia. Se toma la distancia entre el cubo y la esfera, y se divide entre la distancia máxima [3:24]. Esa división convierte cualquier distancia en un número entre 0 y 1, que se usa directamente como T.

¿Qué significa normalizar un valor? Es transformarlo a un rango de 0 a 1 dividiéndolo entre su máximo posible. Aunque el resultado se pase de 1, Lerp lo limita automáticamente al valor B.

El flujo del script es así:

  1. Calcula la distancia entre el cubo y la esfera.
  2. Divide esa distancia entre la distancia máxima para obtener T.
  3. Pasa T a Mathf.Lerp junto con el tamaño mínimo (0.2) y el tamaño máximo (3).
  4. Multiplica el resultado por Vector3.one para convertirlo en un vector de escala.

¿Qué es Vector3.one y por qué se usa aquí?

Vector3.one es un atajo que Unity ya tiene guardado y equivale a escribir new Vector3(1, 1, 1) [4:18]. Como la escala de un objeto es un Vector3 y no un número, multiplicas el resultado de Lerp por Vector3.one para aplicar el mismo valor a los tres ejes sin escribir el constructor completo.

¿Qué otros tipos de Lerp existen en Unity?

Más allá de los números, Unity ofrece variantes de Lerp para distintos tipos de datos [4:55]:

  • Lerp para vectores, útil para interpolar posiciones en el espacio 3D.
  • Lerp para cuaterniones, ideal para rotaciones suaves.
  • Lerp para orientaciones, como forward, right o up.

Cada uno se aplica al mismo principio: dos extremos y un T que controla el avance. Cambiar entre ellos depende del tipo de propiedad que quieras animar.

¿Cómo organizar las propiedades del script en el editor?

Una buena práctica al escribir scripts con interpolaciones es separar las variables en dos bloques:

  • Inicialización: referencias y valores que configuras una sola vez en el editor, como el objeto objetivo.
  • Configuration: parámetros que puedes ajustar para experimentar, como el tamaño mínimo, el tamaño máximo o la distancia máxima [4:38].

Por ejemplo, si cambias el tamaño mínimo a cero, el cubo desaparecerá visualmente al acercarse y crecerá al alejarse. Esa flexibilidad te permite iterar sin tocar el código.

La próxima parada lógica es entender cómo Unity maneja el tiempo, porque hasta ahora los movimientos se están haciendo de una forma que no es la correcta. ¿Has probado ya tu primer Lerp con vectores o cuaterniones? Cuéntame en los comentarios cómo te fue.