Páginas

lunes, 29 de diciembre de 2014

Interpolando plataformas con Unity



La interpolación es el proceso de ir calculando puntos intermedios entre dos o más puntos que nos vienen fijos. Es un problema bastante común en videojuegos, ya que se utiliza para calcular trayectorias de objetos como plataformas que van sobre railes.


Un método sencillo

Existen herramientas muy sofisticadas para calcular interpolaciones, como los splines, pero yo me voy a centrar en un caso muy sencillo y a la vez útil para el día a día, la interpolación lineal.

La interpolación lineal es una foma muy sencilla de interpolar, que consiste en calcular los puntos intermedios sobre una recta que une dos puntos A y B.

Para calcular estos puntos intermedios se puede empezar restando el punto final B menos el origen A, lo que nos da el vector M que va de un punto al otro.




Después se multiplica este vector por un factor entre 0 y 1. Si este factor es 0 nos da el punto inicial, si es 1 el final, y los valores entre 0 y 1 dan los puntos intermedios.




Por tanto para calcular un punto cualquiera P hay que sumar(1) al punto origen A al vector M y multiplicarlo por un factor entre cero y uno.



Sustituyendo M por B - A queda la fórmula final.



(1) Sumamos el punto origen porque hay que "colocar" M sobre el punto A, sino estaríamos interpolando alrededor de (0,0,0).


Pasándolo a Unity


En Unity lo primero sería crear un script que tuviera variables para cada uno de los puntos.


Y en el update aplicar la fórmula, incrementando el factor de interpolación a una cierta velocidad, en este caso 0.1, y cuando detectamos que "nos pasamos" volvemos a poner el factor en 0.


El resultado podría ser así.





Haciendo Ping pong

Otra opción que tenemos cuando el factor llega "al tope" es invertir la velocidad, de forma que el punto P vuelva otra vez hacia A, un comportamiento conocido como Ping Pong.

Para ello podemos declarar una variable sentido que sea 1 si vamos de A a B y -1 si vamos de B a A.


Después de incrementar - o decrementar - el factor, comprobamos que no nos estemos pasando por uno de los extremos, y si lo estamos haciendo, cambiamos el valor de la variable sentido para ir al sentido contrario.



El resultado podría quedar así.





Poniéndolo bonito

Ahora vamos a ver si podemos hacer algo con este script, al fin y al cabo somos game designers ¿no?

Lo primero sería construir un pequeño escenario, podéis usar el construction kit que os presenté hace unas semanas.


Dentro de este escenario nos creamos unas plataformas, que tendrán un punto inicial y otro final. Estos puntos nos harán de "topes".



Ahora agrupamos estos tres objetos - la plataforma y los dos puntos - creando un objeto padre al que vamos a añadir el script de interpolación. Hay otras formas de hacerlo, pero así resulta cómodo mover los objetos.



Modificamos además el script para que la velocidad no sea siempre 0.1, sino que cada plataforma pueda tener una velocidad distinta, añadiendo al script.


Y en el update sustituimos el 0.1 por la variable velocidad.


Finalmente, repartiendo con gracia las plataformas a lo largo del escenario - a lo alto en este caso - llegamos a este bonito resultado.



Como siempre, podéis descargaros el proyecto aquí.



Interpolacion_Unity4.3.4.zip


Hasta la próxima.



No hay comentarios:

Publicar un comentario