Estos días he trabajado en varias cosas, tanto de diseño como de implementación.
Diseño del juego
Exploradas ideas para hacer el juego más "rogelike" alrededor de la base de Match3. Llegué a la idea de poner nuestro personaje a la izquierda y al enemigo (o enemigos) a la derecha del tablero.
Como mis habilidades de dibujar nuevos personajes no són muy buenas y seria un esfuezro demasiado grande para mi. Probé a poner brazos/piernas/ojos/boca a las Gemas que ya tenia hechas. Para tener variedad, decidi dibujar varios ojos/bocas/cuerpos y combinarlas y asi poder tener muchisimos personajes con poco esfuerzo.
El resultado de la prueba me ha gustado. Los ojos/boca/brazos no tienen porque acabar asi, pero sí que sirven como idea:
Decidí agregarle un borde blanco a todo el personaje para hacerlo más visible, y también porque creo que queda bien.
Programación
Para implementar los personajes "por piezas" he creado un archivo .psb con un personaje de ejemplo entero, donde cada parte es un Layer diferente (ojo izq, ojo derecho, boca, cuerpo, brazo izq, ...). Con el PSD Importer de Unity, es bastante moverlo todo luego a Unity. Le añadi los "Bones" (huesos) a cada parte para poder animarlos.
Por otro lado, pasé bastante tiempo investigando como añadir un contorno blanco (outline) a todo el personaje, ya que añadiendo un Material con un Shader de Outline a cada parte no da un resultado satisfactorio. Probé demasiadas cosas sin éxito pero al final llegué a una solución. Como vi que varia gente tenian el mismo problema, decidi publicar un proyecto de ejemplo en mi Github donde muestro como se hace: https://github.com/albertferras/unity-2d-rigging-shader
Para animarlo, vi que hay 2D Inverse Kinematics, que basicamente sirve para hacer que los miembros se "muevan solos". Por ejemplo si muevo un pie a la derecha, las partes de la pierna se mueven solas de forma correcta, o si muevo el cuerpo del personaje pues las piernas hacen como que se agachan. Esto hace que pueda animar a los personajes más facil, ya que tampoco tengo esa "skill".
Combinando los 2D Rigged characters, probando a animarlo y agregando el Outline shader, el resultado ha sido:
Para poder customizar los graficos de cada parte del personaje (cambiar el cuerpo/boca, ...) y mantener el mismo esqueleto (reusar animaciones!), he utilizado la feature de "2D Sprite Swap" de Unity. Basicamente tengo una colección de diferentes ojos, bocas y cuerpos que podré usar como Sprites de cada parte del personaje.
Por último, he decidido invertir tiempo a aprender a hacer cosas customizadas en el editor, ya que cambiar los sprites de los personajes es bastante tedioso, y asi poder definir todos los tipos de personajes que quiera de forma fácil. He usado el UI Toolkit Builder para crear un Inspector a mi gusto para poder configurar cada personaje, cosa que haré con ScriptableObjects.
Con estos ScriptableObjects, podré definir cada tipo de personaje:
- Que sprites usar para cada parte
- Su nombre
- (Futuro) Su nivel, vida, experiencia que da, etc...