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.



domingo, 14 de diciembre de 2014

El misil del Venom o no rendirse

Esta semana os voy a contar una historia. Tiene que ver con uno de los temas recurrentes en el blog: Formar el carácter.

Porque se habla mucho de que para ser diseñador hay que saber de ésto y de ésto otro, pero se habla poco de los obstáculos que hay que afrontar durante el ejercicio de la profesión, y aprender a afrontarlos es tanto o más importante que el contar con conocimientos técnicos sólidos.

Vamos, que os voy a contar una batallita.



Cuando yo era pequeño tenía un Amstrad CPC, un ordenador de 8 bits que funcionaba con cintas. Me pasé muchas tardes jugando con ese ordenador, solo o en compañía de mis amigos.



Uno de los juegos que teníamos se llamaba Venom Strikes Back. Era un juego de plataformas bastante apañado, en el que el protagonista contaba con diferentes armas y habilidades, ambientado en el universo GI Joe basado en una serie de dibujos llamada M.A.S.K.

El juego no era especialmente difícil, pero tenía un punto que parecía imposible, algo que hoy en día sería un fallo de diseño garrafal, pero que en aquella época no era tan raro encontrarse. Nosotros lo llamábamos "El misil del Venom".



Era un misil enorme que se te acercaba, y se te acercaba, y por mucho que le dispararas nunca lo matabas, ni te daba ninguna señal de que le estabas haciendo daño. Uno retrocedía y retrocedía hasta que no podía más y no tenía más remedio que dejarse matar.

Estuvimos un tiempo intentando superar "El misil del Venom", pero no hubo manera, y lógicamente pasamos a otros juegos, dejándolo como una de esas cosas "imposibles" que te encuentras en la vida.

Bueno, no exactamente.


A mí me fastidiaba no haber resuelto el enigma, así que cada cierto tiempo volvía a probar, con el mismo resultado, y después de un tiempo quizá solo lo probaba una vez al año, pero sin llegar a dejarlo.

Muchos años después, ya sin tener el ordenador, me ponía un emulador de Amstrad en el PC y jugaba a algunos de aquellos juegos, y alguna vez probaba a pasarme el Venom Strikes Back, por los viejos tiempos.
.



No sé por qué un día me fijé que siempre lo había estado intentando matar con la misma arma, o con una combinación de las dos armas de que disponía, pero por algún motivo nunca había probado solo con la otra, quizá asumiendo que todas las armas tenían la misma potencia.



Así que me fui hacia el misil, disparé todo lo que pude con esa arma, retrocedí, volví a disparar todo lo que pude, retrocedí y...



¡BUM! Ya no había misil.

Quince años después "el misil del Venom" había caído. En la soledad de mi cuarto, sin testigos, siendo ya casi ingeniero informático, muy lejos de ese crío de doce años que jugaba al Amstrad con sus amigos.

Fortitudine Vincimus, que diría un famoso explorador polar. Vencemos por nuestra resistencia, por nuestra tozudez.

Muchas personas abandonan sus sueños porque se encuentran con un "misil del Venom" en sus vidas.

No os rindáis.




viernes, 5 de diciembre de 2014

¿Unos chistecillos?

Tengo algunos tutoriales en la cocina, pero esta semana no les he podido dedicar tiempo - la vida de un diseñador es complicada -. Mientras busco el hueco y, para no olvidarnos del inglés, ¿qué tal unos chistecillos?


Tomad aire y... 




¡Hasta la próxima!