Publicat per

PEC5 – Media para Videojuegos

Publicat per

PEC5 – Media para Videojuegos

Media para Videojuegos Resumen del proyecto Con el transcurso de la asignatura he realizado unos bocetos y diseño final de dos robots…
Media para Videojuegos Resumen del proyecto Con el transcurso de la asignatura he realizado unos bocetos y diseño final…

Media para Videojuegos

Resumen del proyecto

Con el transcurso de la asignatura he realizado unos bocetos y diseño final de dos robots humanoides, he modelado los robots, los he texturizado, los he riggeado, los he animado y por último los he implementado en un pequeño juego que aún siendo muy simple se puede apreciar el trabajo realizado durante la asignatura.

La primera entrega; la que consistía en hacer los bocetos y modelar los robots ha sido un poco apresurada para mi gusto. Yo soy principalmente modelador, no uno especialmente bueno pero si le dedico mucho tiempo. Pierdo tiempo haciendo detalles para luego deshacerlos por exceso de polígonos, por optimizar la malla hasta puntos un poco enfermizos, rehacer la base del modelo, crear variantes que me convenza más y un largo etcétera. Soy muy perfeccionista en ese aspecto, tanto que muchas veces ni acabo modelos por frustración y luego empiezo otro. Es un ciclo vicioso en el que por cada cuatro modelos que empiezo con suerte acabo uno y luego ni siquiera me gusta su acabado porque considero que podría ser mejor, ya sea en la textura o en la malla.

Para la segunda entrega he presentado a los robots texturizados. Con las texturas me pasa algo parecido al modelo, soy algo obsesivo pero sin llegar al punto que el modelado Las texturas podría ser mejores pero me considero relativamente satisfecho en ese aspecto

Para la tercera entrega he riggeado los robots. Honestamente no hay mucho que contar. Los robots se han diseñado especialmente para que no haya partes de la malla que se doblen. Las rodillas y los codos son esferas por ejemplo. De esta manera simplifica muchísimo el rigeo.

Para la cuarta entrega tenía que realizar las animaciones. Repetiré lo mismo que dije en la entrega anterior; son muy mejorables y podrían ser más vistosas pero son funcionales y dan el pego más o menos. Con más tiempo podría haber pulido mucho más la animaciones e incluso crear algunas más como la de recibir daño, un par de ataques extras y una animación de victoria.

Visión de futuro

Con un equipo más extenso se podría hacer más personajes/robots, más ataques, habilidades y combos con sus respectivas animaciones, más escenarios. El código fuente se tendrá que pulir ya que algunos scripts son un poco código espagueti y en general se tendría que rehacer todo lo que es la interfaz por una más original y personalizada.

Animators

Primero he tenido que ajustar los tiempos en cada animación. Algo que pasaba era que las animaciones duraban más de lo que debían. Por ejemplo; si una animación ocurre entre el frame 30 y el 60 Unity lo exportaba como que duraba del 0 al 60. Esto hacía que durante el frame 0 hasta el 30 el personaje estaba totalmente quieto pero del 30 al 60 ejecutaba la animación.

El animator lo he diseñado de tal manera que se aplique una animación dependiendo del estado en el que se encuentre el personaje. El personaje puede estar:

  1. Caminando hacia delante.
  2. Caminando hacia atrás
  3. Atacando
  4. Bloqueando
  5. Muerto

En caso de que no esté en ninguno de los 6 estados anteriores, se aplica la animación de reposo, o idle. Para evitar errores en las animaciones, el personaje solo puede tener un estado. Si el personaje está atacando no puede interrumpir o realizar otra acción hasta que su ataque finalice. El único estado que le impide volver al idle es el estado de muerte. Para evitar las mezclas he puesto todos los parámetros de transiciones y Exit Time en 0.

Para la animación de caminar hacia atrás, he cogido la de caminar normal y he puesto el “speed” en negativo para que se realice la animación en reversa.

Sonidos

Se han añadido varios sonidos:

  1. Efecto de sonido para los golpes cuando reciben daño
  2. Efecto de sonido para los golpes cuando son bloqueados
  3. Efecto de sonido para cuando el usuario coloca el ratón encima de un botón (selección)
  4. Efecto de sonido cuando se aprieta un botón
  5. Una música para el menú principal
  6. Una música para el nivel de la pelea

Se han implementado mediante Audio Source y se ejecutan mediante codigo con Scripts. Los unicos sonidos que se ejecutan automaticamente sin código y se repiten en bucle es la música.

UI

Se ha implementado una UI, tanto para el juego como el menú principal.

  1. Barras de vida para cada robot
  2. Un menu de pausa que detiene el juego y permite volver al menú principal.
  3. Una pantalla final que permite salir del juego o repetir el nivel/pelea
  4. Un menú principal que permite entrar al nivel, ver los controles o salir.
  5. Un menú de controles que da información acerca de los comandos para controlar a cada personaje.

Recursos externos utilizados

Para implementar un escenario, sonidos y una UI he utilizado recursos de terceros.

Unity Asset Store

Sci-fi GUI skins: https://assetstore.unity.com/packages/2d/gui/sci-fi-gui-skin-15606

Game Input Controller Icons Free: https://assetstore.unity.com/packages/2d/gui/icons/game-input-controller-icons-free-285953

Low Poly street Pack: https://assetstore.unity.com/packages/3d/environments/urban/low-poly-street-pack-67475

AllSky Free – 10 Sky / Skybox Set: https://assetstore.unity.com/packages/2d/textures-materials/sky/allsky-free-10-sky-skybox-set-146014

Free deadly Kombat: https://assetstore.unity.com/packages/2d/gui/icons/game-input-controller-icons-free-285953

Sonidos extras:

Click botón: https://freesound.org/people/bubaproducer/sounds/107130/

Selección botón: https://freesound.org/people/Thunderman98/sounds/656180/

Música

Menu: Jack Wall – Adrenaline (Black Ops 2 Multiplayer Theme)

Juego: Baki OST – Confrontation

Juego

ANTES DE JUGAR! Recomiendo jugar con la pantalla maximizada.

Actualización:La tecla P también sirve para pausar la partida. (Esc o P para pausa)

Link: https://simmer.io/@PauGallego/pec5paugallego

Debat0el PEC5 – Media para Videojuegos

No hi ha comentaris.

Publicat per

R5 – Media para Videojuegos

Publicat per

R5 – Media para Videojuegos

Hola a todos!!!   1. Introducción: Lo primero que quiero comentar es que tuve muchos problemas de rendimiento a la hora de…
Hola a todos!!!   1. Introducción: Lo primero que quiero comentar es que tuve muchos problemas de rendimiento a…

Hola a todos!!!

 

1. Introducción:

Lo primero que quiero comentar es que tuve muchos problemas de rendimiento a la hora de publicar en  WebGL, el videojuego funciona al completo, pero se ve ralentizado y me he visto obligado a configurar el Shader para alcanzar un menor peso sacrificando mejoras como el Outline de los personajes, al inicio de esta entrada estará la versión de como corre una Build del videojuego para ordenador.

Aquí adjunto el link del videojuego en  itch.io:

https://tortmac1.itch.io/bestias-del-metal

Aquí adjunto el link del videojuego en SIMMER:

https://simmer.io/@tortmac/bestias-del-metal

Algo que agregue a esta versión WEB fue el menú de pausa, se activa con clicar sobre el botón de pausa en el centro superior de la pantalla, esto algo que leí en los criterios de entrega y no fue ningún problema dedicar algo de tiempo a configurarlo.

Este proyecto consiste en un prototipo de videojuego de peleas, intenté crear la mayoría de Assets de manera manual, sin embargo para algunos detalles de audio y el botón de pausa necesite de assets externos de los cuales daré crédito mas abajo, con esto podemos empezar una descripción resumida del proceso para crear este prototipo.

2. Resumen del proyecto

2.1. Menu Principal:

Quería crear un menú sencillo para centrarme en el Gameplay del prototipo, se dispone la los botones para empezar una partida o salir del videojuego, la disposición del menú intente que fuera similar a la de los últimos videojuegos de Dear or Alive (considerando esto como un prototipo) ,estéticamente decidí hacer varios render de la robot conejo hasta encontrar uno que me gustara para el menú principal, también incluí un pequeño Script para el movimiento del fondo.

 

2.2. Gameplay:

2.2.1. Fondo y Camara:

Lo primero que considere para esta escena, es el funcionamiento del fondo,  y la cámara, en los videojuegos de pelea es común que la cámara se centre en la distancia entre los dos personajes y sea capaz de desplazarse con ellos, a la vez que pueda acercarse y alejarse a la vez que lo hacen los personajes, el fondo lo cree usando la IA de DALLE-3, ya ha estado presente en otras entregas, pero esta vez se ajusta a la cámara y al nivel del suelo. Para funcionar la Cámara es controlada por otro GameObject  usando un Script para hacer zoom, moverse y seguir a los jugadores, los cuales en medio de ellos tienen un objeto invisible que me sirve como objetivo para la cámara.

2.2.2. Iluminación:

En cuanto a la iluminación, solo modifique un poco la luz direccional y la configuración del Shader ya la tengo desde la entrega anterior, por lo que esta parte no tuvo muchos cambios.

2.2.3. Sistema de combate:

Esto sería fácilmente lo mas complejo del prototipo, así que describiré de forma general como funciona el combate en el videojuego y como fueron desarrolladas:

Lo primero que hice fue pensar como interactuarían las animaciones en el Animator, empezando con una comprobación de cada una.

Aunque ambos personajes usan diferentes Animator, las conexiones y parámetros de activación son los mismos, incluso los nombres. Los personajes pueden estar inactivos, caminando, defendiendo, atacando, recibiendo daño o muriendo, teniendo en cuenta estos estados se pueden determinar mas cosas como por ejemplo que un personaje puede recibir daño o incluso morir en cualquier momento del combate, esto se debe reflejar en el Animator y las condiciones de activación en los Scripts de los personajes.

Teniendo en en cuenta esta lógica, organice a los personajes con sus respectivos Colliers y físicas para poder recibir daño y desplazarse al ser golpeados, pero para lograr crear “golpes” tenía que estudiar como funciona un impacto en un juego de peleas al menos a nivel básico .

Encontré que puedo usar GameObjects con colisiones que se activen exclusivamente al impactar con un ataque, luego a nivel del Script se podría determinar si esta ataque fue “bloqueado” o “recibido”,  si tuviera varios ataques a diferentes partes del cuerpo, podría usar mas Colliders para controlar sus rangos, sin embargo para el prototipo solo tengo un ataque.

Los propios estados de cada personaje deben tener efecto en el control del jugador, por ejemplo si estas recibiendo daño, no podrás mover a tu personaje mientras se ejecuta la animación de recibir daño,  y al realizar un ataque, no se considera que has atacado hasta que la animación llega a su punto de “golpear” que son unos pocos Frames dentro de la animación, la mejor manera de controlar esto es usar eventos en la animación que permitan ejecutar funciones dentro del script del personaje, fue algo que me costo entender, pero el resultado marca una diferencia y permite controlar con mucha precisión lo que pasa mientras se ejecuta una animación.

Para dar algo de feedback al jugador, cuando se lanza un ataque y este impacta contra el oponente, se sueltan partículas rojas desde su punto de impacto, cuando el ataque es bloqueado sucede lo mismo pero con partículas de color blanco, esta es una forma simple de indicar al jugador fuera de las barras de vida.

En el prototipo las barras de vida funcionan como en la mayoría de juegos de pelea, al recibir un ataque, si el personaje es golpeado pierde una proporción de su vida haciendo que el slider de la barra se desplace, actualmente pierden un aproximado de una quinta parte de su vida por cada golpe,  todo esto se controla desde el propio script del personaje, a nivel estético quería que se viera llamativo así que hice renders cómo foto de perfil de los personajes y use la fuente de Terminator que originalmente se uso en Dear or Alive 2 para que se viera mas moderno, la elección de colores fue por esta misma razón.

Cuando un jugador golpea a otro y disminuye su vida a 0, se lanza una pantalla de victoria con el personaje ganador en su animación de Idle y un fondo de victoria creado por IA, en este menú se dispone de botones para iniciar otra partida o volver al menú principal, el texto también cambia según el jugador ganador,  esto se controla desde un GameObject con el script de Game Manager.

2.2.4. Sistema de Sonido:

Durante todo el juego disponemos de sonidos de terceros (créditos al final), que permiten dar vida a los personajes, música de fondo para el combate y para el menú principal, entre otros, la música es un apartado muy importante en los videojuegos, también las voces de los personajes, por eso considere importante agregar esto, los sonidos de fondo normalmente los asigno a la cámara, y los de personajes se encuentran dentro de ellos mismos, así puedo usarlos desde su script fácilmente.

 

2.3 Animator Controller:

Los Animator de los personajes los he explicado anteriormente en el sistema de combate, son muy similares entre sí porque en este caso busco que ambos jugadores tengan las mismas opciones, cuando el personaje se encuentre  inactivo, caminando, defendiendo, atacando, recibiendo daño o muriendo, los parámetros son de suma importancia para activar los estados de animación desde el script de los personajes, como un dato adicional, he realizado pruebas con transiciones de animación y al parecer en los juegos de pelea es común que no hayan transiciones o sean muy bruscas para favorecer el tiempo de respuesta del jugador, en este caso decidí no usar transiciones de salida por este motivo, de por si las animaciones de mis personajes son lentas y están funcionando a 30 FPS en vez de los 24 originales porque se sienten mas fluidas, he realizado algunas modificaciones en la velocidad de las mismas para que el combate se sienta mas fluido.

Robot Coneja:

Robot Tiburona:

 

 

 

 

 

 

 

 

3. Conclusiones:

  • Esta asignatura fue sin duda la que mas disfrute este semestre, me encanta el arte en los videojuegos, incluso el como se relaciona con la parte mas técnica de estos, esta practica consistió mas en programación y diseño de videojuegos, pero es justo esa variedad la que nos enseña lo útil que es lo que hemos aprendido, no se trata solo de crear un personaje, si no de como usarlo y integrarlo en un videojuego correctamente, por esto esta ultima practica es tan importante.
  • Me gustaría que tuviéramos una segunda asignatura de Multimedia para cubrir mas temas como el Parallax en videojuegos, optimización de nuestro arte, los famosos LOD en videojuegos, realmente creo que el tiempo en relación con lo aprendido es excelente, pero sin duda es una asignatura que merece una segunda parte.
  • Considero que como siempre, el limite de lo que aprenda cada estudiante dependerá de su empeño y cuanto quiera expandirse en los caminos que enseña el profesor, en mi caso siento que justo necesitaba entender mas de esta parte técnica de Unity, para sacar partido a futuros trabajos, estoy muy agradecido y contento con el progreso en las entregas, es algo realmente lindo cuando puedes ver tu avance y como cada una de las entregas fue una pieza mas de este rompecabezas que hoy podemos llamar prototipo de juego de peleas.

4. Visión de futuro para este proyecto:

  • Quisiera contar con un programador con experiencia en Gameplay de combates, seguramente crear un sistema de combos, rondas y dar lugar a nuevas dinámicas entre personajes, sería algo ideal.
  • Me gustaría contar con un equipo para desarrollar mas personas, con mas personalidad, nuevas facciones, algo que adoro de videojuegos como Guilty Gear, es el mimo con el que se trabaja cada personaje,  de cierta forma logre algo con este prototipo, pero realmente quisiera aprender mas sobre animación de personajes y como se consigue un nivel como ese.
  • Me gustaría crear un selector de personajes para los combates, donde al elegir a cada uno de ellos, tenga su animación propia de selección.
  • Escenarios con zonas rompibles como los usados en Dear or Alive, poder romper a tu enemigo contra una pared, o ver como se va callendo el techo del escenario mientras peleas, son esa clase de detalles los que marcan una diferencia entre un simple fondo y un escenario de combate.
  • Desarrollar una IA para combatir contra ella con diferentes modos de dificultad, esto también seria útil para el modo historia del videojuego.
  • Teniendo varios personajes en varias facciones, sería genial crear un modo campaña para que los jugadores puedan conocer la historia de cada uno de estos particulares robots.
  • Teniendo poco presupuesto la historia podría desarrollarse como una novela visual entre las peleas que vaya contando la historia, sin duda seria mas viable para un videojuego Indie.
  • Creo que podría escribir todo el día sobre ideas a futuro, pero por ultimo quería decir que pese a ser un prototipo, realmente creo que podría salir un videojuego de peleas divertido a futuro, me gustaría darle una vuela mas cuando deba pensar en mi TFM, pero si alguien me lo preguntara, yo creo que es una buena idea, que vale la pena pulir y representar algún día.

5. Creditos:

Fuente de texto:

https://www.dafont.com/terminator.font?text=DEAD+OR+ALIVE+2&psize=s

Música y sonidos:

https://www.dillonbecker.com

https://es.fiverr.com/davidkbd

Iconos:

https://assetstore.unity.com/packages/2d/gui/icons/modern-rpg-free-icons-pack-264706

6. Anexo:

Como considero muy interesante el Script de control del personaje lo pondré aquí por si alguien tiene curiosidad:

Muchas gracias por leer hasta el final !!!

Debat1el R5 – Media para Videojuegos