jueves, 30 de abril de 2015

Mecánica de caída I: Detección de colisiones

Una de las cosas que me faltaban de implementar en la nueva versión del juego es que cuando caigas al vacío vuelvas a aparecer en tierra, pegándote una hostia que te quite algo de vida.

La primera parte que me plantee es cómo detectar que te has caído. Es algo que parece trivial, pero no es tan sencillo. En la versión vieja iba almacenando la altura del suelo que iba pisando, y cuando detectaba que estaba muy por debajo del último suelo pisado es que me había caído. Este sistema tiene algunos problemas. Tienes que ir almacenando la altura del suelo por el que pasas, si hay alguna caída que es alta pero debe ser así para avanzar tendrás falsos positivos. Y solo funciona hacia abajo, si cambias la gravedad ya no vale y tendría que hacer un sistema bastante más complejo para que funcionase.

Entonces pensé hacerlo con colliders, poner unos objetos rodeando el escenario y si tocas alguno de ellos es que te has caído. Comencé metiendo la pieza de escenario dentro de una caja gigante. Aquí tenía dos opciones y no me gustaba ninguna. Una es poner una cada por cada trozo de escenario, pero entonces me detectaría caídas al pasar de una caja a otra (de un trozo de escenario a otro) y necesitaría comprobaciones extra. Otra sería meter el escenario completo dentro de una caja gigante, pero entonces la distancia entre algunas partes del escenario y la caja de caída sería muy grande, estaríamos demasiado tiempo cayendo, como si eso no tuviera solución. Así que descarte la caja.

Cubierta con planos

lunes, 27 de abril de 2015

Adaptando la cámara al cambio de gravedad

Después de tener la cámara funcionando andando por el suelo, faltaba ponerla apunto para que funcione al cambiar la gravedad, cuando andemos por las paredes o el techo.



Cambio de gravedad


Ahora en lugar de tener un trazado la cámara, tiene 4, uno por cada posible cambio de gravedad, y según la gravedad en ese momento la cámara irá por un raíl u otro. Además como tenemos el suavizado de cámara, a la hora de pasar de uno a otro se hará automáticamente de forma progresiva.




viernes, 24 de abril de 2015

Suavizado de cámara


El siguiente paso en la carrera de la integración de todos los elementos en el juego en Unity 5 era la cámara. He hablado ya mucho de la cámara y le he dado muchas vueltas, ahora toca la integración y alguna mejora.


Una vez integrado el sistema de la cámara con todo lo que había hecho hasta ahora solo falta poner una ruta y probar si la cámara se mueve correctamente por el rail siguiendo al personaje. Y tengo un primer problema. En este nuevo proyecto la escala es bastante pequeña, así que el hueco que dejo entre la posición del personaje y la de la cámara era tan grande que se me acababa el trozo de escenario que tengo antes de que la cámara comenzase a moverse. Así que tendría que bajar esa distancia. Puedo caer en un problema de precisión por usar una escala más pequeña, pero por ahora funciona. La otra opción era reescalar todo lo que tenía, modelos, escenarios, potencias, efectos de partículas, es mucho trabajo.


miércoles, 22 de abril de 2015

Menú de pausa

En los últimos artículos sobre sonido conté como iba a usar un filtro de paso bajo para el menú de pausa, pero como no tenía hecha la lógica para pausar no pude enseñar como sonaba.


Lo primero es crear un pequeño Hud para el menú de pausa, aunque sea sin opciones ni botones ni nada, solo un panel que nos diga que hemos pausado, ya iremos añadiendo opciones. Así que dentro del canvas de UI creo un panel que será el menú de pausa y dentro una imagen (temporal).


lunes, 20 de abril de 2015

Configuración de sonido

Sigo con el sonido, después de ver la teoría, vamos a ver cómo lo uso en el juego. Intenté hacerlo todo con snapshots y transiciones entre ellas. No es mala idea pero no funciona por usar este sistema para intentar crear animaciones de sonido.

Unity 5 mixer

Voy a comenzar por explicar los efectos que quiero conseguir y después voy a explicar los intentos de conseguirlo. Lo que quiero es:

  • Poder controlar (incluso dar la opción al usuario en la configuración) el volumen de música y efectos de juego (espada, curación, quejidos...) por separado.
  • Poder cortar el volumen de todo el sonido del juego cuando suene una interrupción, que se note también que se interrumpe el sonido normal del juego con esa interferencia.
  • Un efecto de corte de frecuencias altas en el menú de pausa.
  • Poder poner un efecto de reberveración y eco ajustable a todos los sonidos y bajar el pitch de la música según el estado de salud del personaje.
  • Que la transición entre estados del personaje sea suave.

viernes, 17 de abril de 2015

Primeras impresiones de Unity 5 (III): Editor de sonido

Unity 5 ha traido también nuevos controles de sonido, y la verdad es que hacía falta, una vez más pasamos de algo bastante básico a un control completamente profesional. Visto por encima puede parecer que han metido una mesa de mezclas y ya, pero tiene bastante más profundidad.

Unity 5 Mixer

Las mesas de mezclas son Mixers, nuevos elementos que creamos, y serían el equivalente en sonido al Animator que usamos con Mecanim. Son elementos con su propia ventana de edición. En un Mixer podemos crear lo que serían canales de la mesa de mezclas, que se llaman Groups. En principio es parecido a un canal en una mesa de mezclas, pero con añadidos. Los Groups del Mixer son una jerarquía donde el sonido de los hijos pasa por el canal padre. Es decir si tenemos una jerarquía típica familiar en un Mixer (abuelo, padre, nieto), el group nieto tiene su sonido, que pasará al padre, si el padre tiene reducción del 50%, llegará un 50% del volumen del nieto al abuelo, y si el abuelo tiene otro 50% de reducción el sonido final que escucharemos será un 25% de lo que sonase en el nieto.

miércoles, 15 de abril de 2015

Power up

Ya puedo matar al enemigo, quiero que cuando acabas con un grupo de venenos caiga un power up para recuperar algo de vida. Así recompensamos al jugador que se para a matar enemigos y no pasa de ellos, y como la vida del personaje va cayendo sola, tienes que pensar si quieres jugar a avanzar rápido sin que te dañen, o a ir matando todo para recoger los power ups.



Tenía que hacer el power up. Tenía en mente esas pildoritas de vida que dejaban caer algunos enemigos en Megaman, al ser en 3D lo más lógico era pensar en algún tipo de esfera más o menos decorada, pero una esfera son muchos polígonos y aún así vista pequeña se nota que no es perfecta. Así que preferí ir a otro tipo de figura más sencilla y al final me quedé con una pirámide cuadrangular. Son 8 polígonos, 4 triángulos que salen de la cúspide y otros 4 que hacen la base. Muy sencilla.


lunes, 13 de abril de 2015

Explosión de veneno

Un vez que detecto bien las colisiones con el personaje o su espada, y tengo una barra de vida, cuando el enemigo golpea al personaje, me falta la parte en que el veneno encaja su golpe cuando el personaje le acierta con la espada.




En el caso del veneno ciego, con 1 solo toque morirá, así que la única reacción que tengo que realizar es la de que muera. Y va a morir en una explosión de líquido verde. Esta explosión es una conjunción de efectos de partículas: he ido cogiendo una nube de humo del efecto de explosión, unas gotas que salpican del de chorro de agua, una textura por allá de una explosión sangrienta y conjuntado todo, y ajustado tamaños, velocidades. Algunos efectos de partículas eran bastante grandes para el tamaño que yo trabajo en el juego y aún reduciendo muchos parámetros el resultado quedaba bastante grande, parecía muy gore (en verde, pero gore), he tenido que reducir todavía más, y aún así es bastante exagerado.


viernes, 10 de abril de 2015

Barra de vida con el nuevo UI

Me estaba dando unos problemas de variables no asociadas el hud antiguo, y como el sistema de UI ha sido actualizado y es bastante mejor ahora, no iba a arreglar el hud viejo para Unity 5, así que ya me puse a aprender sobre el UI nuevo y actualizar el sistema. Por ahora he hecho la barra de vida con el UI nuevo.

UI hud

El UI viejo era una serie eventos donde podías dibujar cosas en código, no era complicado, pero si no te querías matar a hacer mucho código y apaños solía quedar feote. El nuevo UI son componentes de escena, que puedes toquetear en el editor. Funciona un poco como CSS, tenemos un canvas, que es un espacio sobre el que poner componentes de interfaz y tienen características de responsive web. Podemos decidir como se comporta un elemento al redimensionar la pantalla, si debe estar a una distancia fija de un borde, debe hacerse más estrecho proporcionalmente, mantener tamaño, en un eje, en varios... Además podemos decidir de qué forma se interpreta una imagen. Por ejemplo si tenemos una imagen de fondo para un botón podemos elegir cortes sobre la imagen de tal manera que se redimensione la parte central, dejando los bordes como en el original. Tiene también varios modos de renderizado, 2d en plan hud en pantalla, o con cierta perspectiva, o 3D en el mundo del escenario, para poner, por ejemplo, un bocadillo justo sobre la cabeza de un personaje.

miércoles, 8 de abril de 2015

Detección de colisiones de personaje y espada

Estoy en un momento de conectar piezas, ir poniendo todo sobre la mesa y entonces es cuando veo que quedan cosas por hacer aquí, allá, cosas que no están bien migradas o que prefiero hacer de otra manera. Por eso seguramente vengan unos artículos que den bandazos de un lado para otro, lo que me voy encontrando al unir piezas.


En este caso vuelvo a tocar el tema de las colisiones. Todo surge porque una vez que tenía el personaje moviéndose y dando espadazos y al veneno ciego patrullando, era bastante lógico querer probar si se manejaba bien, si podíamos herir al enemigo de forma fácil, o él a nosotros... Y para eso necesito saber cuándo el enemigo choca con nosotros o con la espada.

lunes, 6 de abril de 2015

Problemas al importar el Ciego en Unity

En su momento hice el diseño y animaciones del nuevo tipo de enemigo: el veneno ciego. Y ahí quedó la cosa. No llegué a incluirlo en Unity porque me puse con otras cosas, y ahora ha llegado el momento, y me he encontrado con varios problemas, no ha sido tan sencillo como yo creía.



Ciego en Unity


El primer problema fueron los huesos. Como solo quería animar los brazos, puse unos huesos sueltos en cada brazo, y si en Unity eliges la animación como Legacy se mueve, pero en Generic no. Y si estoy usando animaciones del tipo actual no quería volver a Legacy. Llegué a la conclusión de que no funcionaba con Generic, por ser dos esqueletos, uno en cada brazo, y no uno solo. Y creo que tenía razón, añadí un hueso más al cuerpo que unía los dos brazos y la animación empezó a funcionar con un rig de tipo Generic en Unity.




miércoles, 1 de abril de 2015

Interrupciones con Screen Overlay

Al probar las características de Unity 5, miré todos los efectos de imagen que traía, realmente no hay ninguno nuevo, que no estuviera en Unity 4 pro, pero al jugar con ellos me di cuenta que había una cosa que podía hacer más fácil que como lo estaba haciendo: las interrupciones.

Interrupción del espantapájaros

Hasta ahora las interrupciones las hacía de la siguiente forma: tenía en la misma escena un plano con una textura que cambiaba al azar entre las posibles imágenes de interrupción, con su propia cámara y luz. Lo tenía alejado del resto del escenario para que no se viera, y con la luz trabajando solo en la capa del plano de esa imagen para que esa luz no afectase a la iluminación del resto de la escena. La cámara tenía puesto el efecto de ruido tipo televisión analógica que se ve. Y cada vez que salía al azar que tenía que hacer una interrupción apagaba la cámara principal del juego y ponía en marcha la de este sitio secundario.