Publicado por

The sky is the limit

Publicado por

The sky is the limit

Sea of Clouds v2.0 «Sea of Clouds» es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3) y…
Sea of Clouds v2.0 «Sea of Clouds» es el nombre de mi prototipo para la tercera Práctica de Evaluación…

Sea of Clouds v2.0

«Sea of Clouds» es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3) y para la Práctica Final (FP) de la asignatura Programación de Videojuegos 3D del Máster Universitario en Diseño y Programación de Videojuegos de la UOC.

El objetivo de la práctica era desarrollar un juego de plataformas en tercera persona utilizando los conocimientos adquiridos en el estudio del tercer módulo de la asignatura y realizando investigación por cuenta propia. La práctica final, además, requería ampliar el juego añadiendo mejoras y nuevas características.

Novedades de la práctica final

Como la práctica final es una extensión de la práctica anterior, a continuación se detallan los cambios y mejoras que se han llevado a cabo para poder determinar de manera fácil las diferencias entre ambas:

  • Se ha añadido un submenú de opciones y una pantalla de créditos al menú principal
  • Se ha rehecho completamente la escena de juego
  • Se ha añadido un vehículo controlable por el jugador
  • Se ha añadido vehículos con movimiento autónomo
  • Se ha añadido un nuevo comportamiento para todos los tipos de personaje que hace que exploten si son arrollados por un vehículo
  • Se ha corregido los errores detectados en la práctica anterior

La práctica también ha servido para corregir los errores detectados en la práctica anterior:

  • Los sistemas de partículas asociados a los personajes y objetos ya no se están renderizando por detrás de los elementos del terreno.
  • Las olas del agua que rodea la isla ya no se reflejan en los personajes y enemigos repartidos por la escena.
  • Todos los personajes están completamente sonorizados.
  • No es posible caer a las zonas de muerte.

Además, al final se ha optado por prescindir de la munición y de los diferentes tipos de armas, debido principalmente a la falta de tiempo, pero también porque el diseño del mundo ludoficcional no lo ha contemplado desde el principio y su inclusión hubiera sido forzada. En cualquier caso, tanto el cambio de arma como la gestión de la munición son conceptos que se han aplicado anteriormente en otras prácticas.

Tampoco se ha aplicado el sistema de control de tráfico por motivos similares, dado que la existencia de semáforos u otras señales de tráfico no acaba de encajar con la atmósfera del juego.

Vídeo explicativo (PF)

Vídeo explicativo (PEC3)

Repositorio en GitLab

UOC – M7.458 – PEC3 en GitLab

Versión de Unity

La versión de Unity utilizada para el desarrollo de la práctica es la 2021.3.19f1 LTS.

El orden de las escenas está definido en los builds settings del proyecto, siendo Assets/Scenes/Opening.scene la primera escena que debe cargarse.

Cómo jugar

El objetivo del juego es conseguir tres llaves mientras se esquiva a hordas de monstruos. Una vez conseguidas las tres llaves, aparece un enemigo mayor cuya derrota es el objetivo final del juego.

El control se lleva a cabo mediante teclado y ratón, aunque también está preparado para ser compatible con gamepad:

  • Las letras WASD mueven al personaje.
  • El Espacio hace que el personaje salte.
  • La tecla Mayúsculas izquierda sirve para que el personaje esprinte.
  • El botón derecho del ratón apunta el arco.
  • El botón izquierdo del ratón dispara el arco.
  • El botón central del ratón realiza un ataque cuerpo a cuerpo.
  • La tecla E sirve para entrar y salir del vehículo.
  • La tecla Escape sirve para pausar el juego y abrir el menú de pausa.

Desarrollo

De cara a completar el desarrollo de ambas prácticas, se han llevado a cabo las siguientes tareas obligatorias y opcionales, además de incluir algunos extras que se han ido añadiendo a lo largo del desarrollo.

Tareas obligatorias

  • ✅ Se ha creado un escenario que dispone de zonas urbanas y vegetales.
  • ✅ El personaje dispone de un arma a distancia que le permite disparar hacia delante.
  • ✅ El personaje está completamente animado.
  • ✅❗La salud y la armadura se muestran constantemente en el HUD, pero no la munición.
  • ✅ Los enemigos pasean por la ciudad y atacan al enemigo cuando está cerca.
  • ✅ Los enemigos están completamente animados.
  • ✅ Se dispara un sistema de partículas cuando un personaje (jugador o no) recibe daño o muere.
  • ✅❗Hay objetos de salud y armadura repartidos por el escenario, pero no de munición.
  • ✅ El juego dispone de una pantalla de juego terminado que permite reiniciar la partida.
  • ✅ Los enemigos se mueven entre puntos aleatorios y corren hacia el jugador al detectarlo.
  • ✅ Hay personajes de carácter neutral paseando por el escenario.
  • ✅ Los personajes de carácter neutral huyen de los enemigos.
  • ✅ Se ha creado un menú principal que, además de empezar la partida, permite configurar varios parámetros del juego: volumen general, velocidad del juego y dificultad del juego.
  • ✅ Hay vehículos que se mueven por el escenario.
  • ✅ El jugador puede entrar en los vehículos y desplazarse con ellos.

Tareas opcionales

  • ✅ El juego dispone de al menos un puzle que requiere saltar para progresar.
  • ❌ Se han añadido diferentes tipos de armas.
  • ❌ Las armas están repartidas por el escenario.
  • ✅ El juego está totalmente sonificado.
  • ✅ Se han añadido diferentes tipos de enemigos.
  • ✅ Es posible apuntar al disparar.
  • ✅ El juego dispone de al menos un puzle que requiere obtener llaves para progresar.
  • ✅ El jugador tiene un arma cuerpo a cuerpo.
  • ✅ Los enemigos pueden dejar objetos al morir.
  • ✅ Los enemigos aparecen en varias fuentes del escenario de manera incremental.
  • ✅ Se ha utilizado el componente animation rigging para que el personaje mire hacia los objetos cercanos.
  • ✅ Se ha implementado la iluminación global.
  • ✅ Los personajes de carácter neutral se convierten en enemigos al morir a manos de un enemigo.
  • ❌ Hay un sistema de control del tráfico que limita el movimiento autónomo de los vehículos.
  • ✅ Los NPC y los enemigos explotan si el jugador los atropella a gran velocidad.

Características principales

A continuación se detallan las características más importantes del desarrollo de la práctica.

La escena de juego (PEC3 y PF)

La escena del juego se ha rehecho completamente para la práctica final. Ahora, el escenario consiste en cuatro islas flotantes en un mar de nubes.

  • La isla principal, Gada, situada al suroeste, consiste en una aldea con varios edificios y zonas vegetales. Hay varios NPC repartidos por ella y enemigos que empiezan a aparecer la primera vez que se vuelve a ella. Uno de los enemigos que aparece posee una de las llaves.
  • La isla del sureste, Stria, contiene un templo en el que se encuentra una de las llaves. Para llegar a ella, es necesario resolver un puzle que consiste en abrir varias puertas pisando diferentes interruptores y llegado a una zona inaccesible mediante plataformas.
  • La isla del norte, Voni, contiene un bosque en el que se encuentra la última de las llaves. Hay varios enemigos fuertes repartidos por ella que conviene evitar.
  • Finalmente, la isla del centro, Vanglasaar, contiene una estructura en la que se encuentra el jefe final del juego. Para llegar a él, es necesario haber recogido previamente las tres llaves.

Apuntado, disparo y ataque cuerpo a cuerpo (PEC3)

Para poder disparar el arco, es necesario cargarlo primero. Al hacerlo, el juego bloquea el movimiento del jugador para que no pueda girar con las flechas (sólo desplazarse lateralmente) y enfoca la visión utilizando una segunda cámara. Además, permite apuntar de manera libre a cualquier punto de la escena.

El HUD (PEC3 y PF)

Como en el caso de la práctica anterior, la interfaz de usuario muestra en todo momento la salud y el escudo del jugador, así como las llaves que ha conseguido. También muestra la cruceta y los mensajes enviados por el juego.

Tipos de personaje (PEC3)

A efectos de gestionar de manera transversal las características comunes entre jugador, enemigos y NPC, se ha creado una clase maestra que contiene las propiedades y métodos compartidos y que se apoya en una máquina de estados para manejar el tipo del jugador. Esta aproximación permite, entre otras cosas, poder cambiar fácilmente de tipo a un personaje y se implementa cuando un NPC neutral o aliado se convierte en enemigo al morir. E incluso permitiría al jugador controlar a un NPC o a un enemigo, así como a cualquier otra entidad a la que se extienda la clase.

Se han incluido los tipos siguientes:

  • Player. En este estado, se desactivan las automatizaciones y se activan el character controller y el resto de componentes necesarios para poder jugar.
  • Enemy. En este estado, el personaje deambula por la escena y ataca al jugador y a los NPC neutrales y aliados cuando pasan cerca.
  • Boss. En este estado, el personaje se comporta igual que un enemigo, pero añade la lógica de finalización del juego al derrotarlo.
  • Neutral. En este estado, el personaje deambula por la escena y huye cuando un enemigo pasa cerca.
  • Ally. En este estado, el personaje deambula por la escena y ataca a los enemigos que pasan cerca.

En el caso de los enemigos y los NPC (neutrales y aliados) se han añadido varios tipos con modelos y características diferentes (velocidad, daño, resistencia, etc.).

Objetos y llaves (PEC3)

Como en la práctica anterior, el juego incluye tanto objetos de curación como llaves repartidas por el escenario o dejadas por los enemigos al morir.

Vehículos (PF)

La principal novedad añadida en la práctica final es la inclusión de vehículos. En concreto, se han añadido una nave que permite al jugador desplazarse entre las islas flotantes y que tiene dos estados posibles, ya que, como en el caso de los jugadores, se apoya en una máquina de estados para gestionar su comportamiento y permite cambiar de tipo en tiempo de ejecución:

  • Human. En este estado, el jugador puede controlar la nave y atropellar a los enemigos flotantes.
  • AI. En este estado, la nave se desplaza de manera autónoma en rutas predeterminadas.

El jugador sólo puede subir y bajar del vehículo desde el muelle de cada isla.

Animaciones y rigging (PEC3)

Todos los personajes están completamente disponen de animaciones para todas las posibles combinaciones, aunque no las utilicen, precisamente por la posibilidad de que cualquiera de ellos cambie de tipo. Además, se usan capas y animation events para poder controlar de manera fácil desde el código los momentos en los que se produce algún factor de interés en la reproducción de la animación.

También se ha implementado el animation rigging para el jugador, principalmente para hacer que tanto la cabeza como el torso del personaje miren suavemente hacia los objetos que tienen cerca, pero también para asegurar que el arco mira en todo momento a la posición correcta cuando se está apuntando.

Sistemas de partículas (PEC3)

Se han implementado partículas para un gran número de acciones: al ser golpeado, al morir, al recuperar salud, al convertirse en enemigo, etc.

Inteligencia artificial (PEC3)

Para implementar los objetivos relacionados con la inteligencia artificial, se utiliza una mezcla de NavMesh y de detección de colisiones. Todos los personajes disponen de tres maneras de detectar colisiones: con el collider incorporado al modelo a través del player controller o del capsule collider, con un trigger en un una esfera con un radio de cuatro metros (esfera interna) y por otra con un radio de siete metros (esfera externa). Además, disponen del componente NavMeshAgent para poder navegar por el terreno de manera autómoma.

Teniendo eso en cuenta, el flujo de un personaje normalmente es:

  1. En su estado inicial, a falta de objetivos, el personaje deambula por el escenario desplazándose entre puntos aleatorios con NavMesh.
  2. Cuando otro personaje entra en su esfera interna, lo añade a una lista de objetivos que utiliza para escapar (NPC neutral) o para saber a qué atacar (NPC Aliado, Enemigo y Enemigo final).
  3. Además, si el personaje es atacado por cualquier otro personaje, lo define directamente como objetivo forzado, independientemente de si está o no dentro del rango de detección.
  4. Mientras la lista contiene objetivos, el personaje comprueba qué personaje es el que está más cerca y en base a ello fija un punto de origen del cuál huir (NPC neutral) o fija un punto de destino para atacar (NPC Aliado, Enemigo y Enemigo final).
  5. Si el personaje alcanza a su objetivo, ataca siempre y cuando no exista una determinada distancia entre ambos.
  6. Cuando un objetivo sale de la esfera externa, el personaje lo elimina de la lista de personajes y deja de perseguirlo.
  7. Si la lista de objetivos se vacía, el personaje vuelve a deambular por el escenario.

 

Iluminación global (PEC3)

Finalmente, se ha hecho uso de la iluminación global y el baking para optimizar el uso de la iluminación en la escena de juego y mejorar el rendimiento general.

 

Créditos

Paquetes completos

Fuentes

Música

Shaders

Sonidos

Referencias

C# – General

Unity – General

Animaciones – General

Animaciones – Interrupción

Animaciones – Rigging

Cinemachine

Iluminación

NavMesh

Shaders

Debate1en The sky is the limit

  1. Anna Zango Palau says:

    Salva, que pasada!! Me encantan las islas flotantes, que idea tan genial! Y el sistema de transporte con navecitas encaja tan bien con el diseño del escenario. Vaya, como siempre, un trabajo espectacular :D

Publicado por

PEC Final – GTA de Zombies

Publicado por

PEC Final – GTA de Zombies

Enlace al proyecto en Gitlab: https://gitlab.com/dsahuquillod/practicafinal3d Enlace al video de muestra: 4. ¿Serías capaz de crear tu GTA de zombis? …
Enlace al proyecto en Gitlab: https://gitlab.com/dsahuquillod/practicafinal3d Enlace al video de muestra: 4. ¿Serías capaz de crear tu GTA de…

Enlace al proyecto en Gitlab:

https://gitlab.com/dsahuquillod/practicafinal3d

Enlace al video de muestra:

Debate0en PEC Final – GTA de Zombies

No hay comentarios.

Publicado por

Prog 3D – Práctica final

Publicado por

Prog 3D – Práctica final

¡Hola! Os dejo mi entrega para la última práctica de Programación 3D. El juego es una modificación de la PEC 3 añadiendo los puntos extras y extendiendo el poblado dónde se desarrollaba la acción para incluir todos los puntos necesarios. En el readme del repositorio está ampliada la documentación con toda la información sobre las decisiones tomadas a la hora de diseñar el juego por lo que si alguien quiere echarle un ojo y sigue privado podéis darme un toque…
¡Hola! Os dejo mi entrega para la última práctica de Programación 3D. El juego es una modificación de la…

¡Hola! Os dejo mi entrega para la última práctica de Programación 3D.

El juego es una modificación de la PEC 3 añadiendo los puntos extras y extendiendo el poblado dónde se desarrollaba la acción para incluir todos los puntos necesarios.

En el readme del repositorio está ampliada la documentación con toda la información sobre las decisiones tomadas a la hora de diseñar el juego por lo que si alguien quiere echarle un ojo y sigue privado podéis darme un toque ?

Gameplay

Enlaces

Recursos usados

Debate2en Prog 3D – Práctica final

  1. Anna Zango Palau says:

    Fuaa muy muy fan del lanzagranadas jajaja! Y con las partículas y el humo queda de maravilla Isma!

Publicado por

GDA (Grand Dead Auto) – Como GTA pero tiene zombies

Publicado por

GDA (Grand Dead Auto) – Como GTA pero tiene zombies

¡Hola a todos! Último trabajo de la asignatura. En este trabajo, he mejorado la práctica anterior y he añadido nuevos puntos: zombies que se comen a personas y las transforman, coches automáticos o manuales para atropellarlos a todos y mucho más. No hago spoilers :) Aquí dejo el vídeo y el repo. 4. ¿Serías capaz de crear tu GTA de zombis? …
¡Hola a todos! Último trabajo de la asignatura. En este trabajo, he mejorado la práctica anterior y he añadido…

¡Hola a todos!

Último trabajo de la asignatura. En este trabajo, he mejorado la práctica anterior y he añadido nuevos puntos: zombies que se comen a personas y las transforman, coches automáticos o manuales para atropellarlos a todos y mucho más. No hago spoilers :)

Aquí dejo el vídeo y el repo.

Debate0en GDA (Grand Dead Auto) – Como GTA pero tiene zombies

No hay comentarios.

Publicado por

Programación 3D – GTA

Publicado por

Programación 3D – GTA

Buenas! Aquí os dejo un video con mi proyecto para la última entrega de la asignatura. 4. ¿Serías capaz de crear tu GTA de zombis? …
Buenas! Aquí os dejo un video con mi proyecto para la última entrega de la asignatura. 4. ¿Serías capaz…

Buenas! Aquí os dejo un video con mi proyecto para la última entrega de la asignatura.

Debate0en Programación 3D – GTA

No hay comentarios.

Publicado por

Práctica Final: Un GTA de Zombies

Publicado por

Práctica Final: Un GTA de Zombies

Hola compañeros. Este es mi intento de juego para la PEC Final: Un GTA de zombies. Este juego tiene las mismas mecánicas que la PEC anterior, al ser una continuación de la misma. añadiendo la interacción con coches y peatones que pueden convertirse en zombies si son atacados por éstos. Aquí tenéis un pequeño video con una demo: También lo podéis jugar en mi itch.io tanto en escritorio como en web. Los controles son los siguientes: Movimiento: W A S…
Hola compañeros. Este es mi intento de juego para la PEC Final: Un GTA de zombies. Este juego tiene…

Hola compañeros. Este es mi intento de juego para la PEC Final: Un GTA de zombies. Este juego tiene las mismas mecánicas que la PEC anterior, al ser una continuación de la misma. añadiendo la interacción con coches y peatones que pueden convertirse en zombies si son atacados por éstos.

Aquí tenéis un pequeño video con una demo:

También lo podéis jugar en mi itch.io tanto en escritorio como en web. Los controles son los siguientes:

  • Movimiento: W A S D
  • Salto: espacio
  • Disparo primario: click izquierdo del ratón
  • Disparo secundario: Click derecho del ratón
  • Cambio de arma: rueda del ratón
  • Sprint: Shift + movimiento
  • Entrar / salir de los coches: F cerca de alguno

Debate0en Práctica Final: Un GTA de Zombies

No hay comentarios.

Publicado por

PEC Final – Dead Behind

Publicado por

PEC Final – Dead Behind

Para esta PEC Final teníamos que realizar un juego similar al Grand Theft Auto con Zombies. En mi caso e continuado el…
Para esta PEC Final teníamos que realizar un juego similar al Grand Theft Auto con Zombies. En mi caso…

Para esta PEC Final teníamos que realizar un juego similar al Grand Theft Auto con Zombies.

En mi caso e continuado el proyecto que ya tenia en la PEC 3, corrigiendo algunos aspectos de este e introduciendo los puntos demandados.

Video del GameplayIMAGE ALT TEXT HERE

https://www.youtube.com/watch?v=Uob2Al98WSQ

Puntos obligatorios

Menú principal

El primer punto obligatoria a implementar era el de un menú con varias opciones al iniciar el juego. Para el menú principal e incluido las opciones de «Start Game» (Comenzar el juego), «Options» (Menu para configurar más opciones) y «Exit» (Para salir de la aplicación). Dentro de la selección «Options» podremos encontrar varios parámetros personalizables: Resolution (Permite escoger si ver el juego en su resolución original o en alta definición) Fullscreen (Permite cambiar de pantalla completa exclusiva a modo ventana y viceversa) Audio (Permite silenciar todo el audio de la partida o no) Esto permite al jugador configurar los elementos antes de entrar en partida.

alt text

alt text

Ciudad con edificios y zombies

Para este punto se a ampliado muchísimo el mapa incluyendo diferentes tipos de estructuras (algunas de ellas se pueden entrar), además de vegetación, mobiliario urbano y envuelto por agua simulando una isla. Además, se a incluido multitud de zombies, peatones y coches circulando por la carretera. También se ha repartido municiones y kits de vida por el mapeado.

alt text

alt text

alt text

IA Zombies

El punto de la IA para los zombies es reciclado de la PEC 3, arreglando algunos problemas, además de introducir nuevos comportamientos. Mediante «Tags» y «Colliders» el zombie detecta si tiene que atacar y perseguir el elemento en cuestión.

Peatones y coches autónomos

Para este punto se ha utilizado agentes «NavMeshAgent» creando zonas transitables para los peatones y un «Layer» separado solo transitable para los coches. Para la lógica de estos últimos, se ha establecido una ruta predefinida con aleatoriedad de selección de camino en caso de bifurcación. Para los peatones, ya que es el mismo «PreFab» que los zombies se ha utilizado la misma lógica que la PEC 3.

Peatones que huyen de los zombies

Este punto se ha implementado utilizando «Tags» y «Colliders», ya que el mismo «PreFab» puede ser peatón o zombie en función de si el «Bool» «ItsHuman» esta marcado o no. Si el «PreFab» es humano y detecta que entra un zombie en su línea de visión este se empieza a mover a una posición distinta, aunque tiene un «Cooldown» por «Coroutine» de unos segundos.

Conducción estilo Grand Theft Auto

Para este punto e creado una serie de «PreFabs» de los coches que contienen tanto la lógica del «NavMeshAgent» que les permite circular de forma autónoma, como la propia conducción del player. Esto se consigue mediante «Bools» y «Colliders», de tal manera que si el coche y el jugador detecta que esta en la puerta, al presionar el control del «Input System» realiza una serie de acciones como posicionar al jugador en la misma posición que el coche, deshabilitar en «NavMeshAgent» del coche tomado y deshabilitar el «Skin Mesh» del jugador entre muchas otras. Una vez se a cogido un coche este queda vacío y no volverá a tener conducción autónoma.

Puntos opcionales

Semáforos que controlen el tráfico

Para implementar este punto he colocado unos «Colliders» en los coches que al colisionar con los semáforos actúan de una manera u otra según el «Bool» que tenga marcado en ese momento el semáforo colisionado (Si el «Collider» de un coche entra en contacto con un semáforo con el «Bool» activo «ItsRed» este se parará). Además el coche detecta si delante se colocan zombies, peatones, jugador o otros coches (para evitar colisionar).

alt text

Peatones que se convierten en Zombies

Este punto se ha implementado utilizando el propio «PreFab» del zombie, de tal manera que el este empieza siendo humano y cuándo un zombie le quita la vida le reasigna el «Tag» de zombie además de asignarle un nuevo material con la piel de zombie para cambiarle el aspecto.

alt text

Sonorizar el nivel

Mi anterior PEC 3 no introduje sonido, ya que no me parecía relevante. En esta PEC he intentado sonorizar los puntos básicos, como los zombies, los disparos y el ambiente.

Debate2en PEC Final – Dead Behind

  1. Anna Zango Palau says:

    Marc, tenía muchas ganas de ver como avanzaba tu proyecto, porque me encanta que hagas tu el arte! Te ha quedado fantástico, y los efectos de luz cuando disparas, o la luz del coche de policía que conduces, quedan TAN bien. Felicidades! Por cierto, ya conocía Blender pero modelado y animaciones me parece un mundo tan nuevo y complicado que no sé por donde empezar. Igual me hago un cursito de Udemy este verano para ir más preparada para Media, que la haré el semestre que viene :).

Publicado por

Práctica Final – Un «GTA» Shooter cenital – Quim Colobrans Ramírez

Publicado por

Práctica Final – Un «GTA» Shooter cenital – Quim Colobrans Ramírez

Entrega de la Práctica Final de la asignatura Programación de videojuegos 3D. Como jugar La practica «GTA» trata de un prototipo de shooter con cámara cenital que extiende de la anterior práctica. El jugador explorará el mapa abriéndose paso eliminando enemigos mientras hace uso de las armas y vehículos disponibles, con el fin de derrotar el Zombie jefe. El objetivo de este prototipo es derrotar el Zombie jefe (verde con el pelo rojo que se encuentra en la parte con…
Entrega de la Práctica Final de la asignatura Programación de videojuegos 3D. Como jugar La practica «GTA» trata de…

Entrega de la Práctica Final de la asignatura Programación de videojuegos 3D.

Como jugar

La practica «GTA» trata de un prototipo de shooter con cámara cenital que extiende de la anterior práctica. El jugador explorará el mapa abriéndose paso eliminando enemigos mientras hace uso de las armas y vehículos disponibles, con el fin de derrotar el Zombie jefe.

El objetivo de este prototipo es derrotar el Zombie jefe (verde con el pelo rojo que se encuentra en la parte con más densidad de zombies del mapa), para así salvar a los habitantes de la ciudad que restan vivos.

Controles
  • Movimiento (Personaje y Coche): Teclas W-A-S-D.
  • Saltar: Tecla Espacio.
  • Correr: Tecla Shift.
  • Disparar: Botón izquierdo del ratón.
  • Apuntar: Botón derecho del ratón.
  • Cambiar arma: Deslizar rueda del ratón arriba y/o abajo.
  • Entrar en coche: Tecla E.
  • Salir de coche: Tecla F.

El jugador no se puede mover, cambiar de arma ni saltar si está apuntando.
El jugador no puede apuntar si está saltando.
Después de saltar, el jugador permanecerá inmóvil unos segundos.
El jugador no puede disparar si está conduciendo.
El jugador no puede dañar a los NPCs.

Gameplay Video
Acceso al repositorio de Git (Repositiorio del proyecto base: PEC 3)
https://gitlab.com/qcolobrans/prog.3d_pec-3
Créditos:

Desarrollado por:  Quim Colobran Ramirez – @quicorax
Todos lo assets usados en el desarrollo de este proyecto son de uso público o han sido proporcionados por la UOC.

Debate0en Práctica Final – Un «GTA» Shooter cenital – Quim Colobrans Ramírez

No hay comentarios.

Publicado por

As above, so below

Publicado por

As above, so below

Sea of Clouds «Sea of Clouds»es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3) de la asignatura…
Sea of Clouds «Sea of Clouds»es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3)…

Sea of Clouds

«Sea of Clouds»es el nombre de mi prototipo para la tercera Práctica de Evaluación Continua (PEC3) de la asignatura Programación de Videojuegos 3D del Máster Universitario en Diseño y Programación de Videojuegos de la UOC.

El objetivo de la práctica era desarrollar un juego de plataformas en tercera persona utilizando los conocimientos adquiridos en el estudio del primer módulo de la asignatura y realizando investigación por cuenta propia.

Vídeo explicativo

Repositorio en GitLab

UOC – M7.458 – PEC3 en GitLab

Versión de Unity

La versión de Unity utilizada para el desarrollo de la práctica es la 2021.3.19f1 LTS.

El orden de las escenas está definido en los builds settings del proyecto, siendo Assets/Scenes/Opening.scene la primera escena que debe cargarse.

Cómo jugar

El objetivo del juego es conseguir tres llaves mientras se esquiva a hordas de monstruos. Una vez conseguidas las tres llaves, aparece un enemigo mayor cuya derrota es el objetivo final del juego.

El control se lleva a cabo mediante teclado y ratón, aunque también está preparado para ser compatible con gamepad:

  • Las letras WASD mueven al personaje.
  • El Espacio hace que el personaje salte.
  • La tecla Mayúsculas izquierda sirve para que el personaje esprinte.
  • El botón derecho del ratón apunta el arco.
  • El botón izquierdo del ratón dispara el arco.
  • El botón central del ratón realiza un ataque cuerpo a cuerpo.
  • La tecla Escape sirve para pausar el juego y abrir el menú de pausa.

Desarrollo

De cara a completar el desarrollo de la práctica, se han llevado a cabo las siguientes tareas obligatorias y opcionales, además de incluir algunos extras que se han ido añadiendo a lo largo del desarrollo.

  • ✅ (Obligatorio) Se ha creado un escenario que consiste en un pueblo y una zona natural.
  • ✅ (Obligatorio) El personaje dispone de un arma a distancia que le permite disparar hacia delante.
  • ✅ (Obligatorio) El personaje está completamente animado.
  • ✅❗ (Obligatorio) La salud y la armadura se muestran constantemente en el HUD. La munición, no (ver explicación más adelante).
  • ✅ (Obligatorio) Los enemigos pasean por la ciudad y atacan al enemigo cuando está cerca.
  • ✅ (Obligatorio) Los enemigos están completamente animados.
  • ✅ (Obligatorio) Se dispara un sistema de partículas cuando un personaje (jugador o no) recibe daño o muere.
  • ✅❗ (Obligatorio) Hay objetos de salud y armadura repartidos por el escenario. Munición, no (ver explicación más adelante).
  • ✅ (Obligatorio) El juego dispone de una pantalla de juego terminado que permite reiniciar la partida.
  • ✅ (Opcional) El juego dispone de al menos un puzle que requiere saltar para progresar.
  • ❌ (Opcional) No se han añadido otros tipos de arma (ver explicación más adelante).
  • ✅ (Opcional) El juego está totalmente sonificado.
  • ✅ (Opcional) Se han añadido diferentes tipos de enemigos.
  • ✅ (Opcional) Es posible apuntar al disparar.
  • ✅ (Opcional) El juego dispone de al menos un puzle que requiere obtener llaves para progresar.
  • ✅ (Opcional) El jugador tiene un arma cuerpo a cuerpo.
  • ✅ (Opcional) Los enemigos pueden dejar objetos al morir.
  • ✅ (Opcional) Los enemigos aparecen en varias fuentes del escenario de manera incremental.
  • ✅ (Opcional) Se ha utilizado el componente animation rigging para que el personaje mire hacia los objetos cercanos.
  • ✅ (Opcional) Se ha implementado la iluminación global

Todos los objetivos que no se han cumplido o se han cumplido parcialmente están relacionados con la inclusión de nuevas armas o con la munición y es porque el proyecto se ha considerado como un todo que incluye los objetivos de esta práctica y de la siguiente y, por un motivo puramente arquitectónico y de optimización del proceso de desarrollo, se ha optado por implementar primero las características con mayor transversalidad y por posponer aquellas que son fácilmente incorporables como extras. En concreto, se ha priorizado la implementación de la IA en los personajes, afrontando las siguientes tareas de la próxima práctica:

  • ✅ (Obligatorio) Los enemigos se mueven entre puntos aleatorios y corren hacia el jugador al detectarlo.
  • ✅ (Obligatorio) Hay personajes de carácter neutral paseando por el escenario.
  • ✅ (Obligatorio) Los personajes de carácter neutral huyen de los enemigos.
  • ✅ (Opcional) Los personajes de carácter neutral se convierten en enemigos al morir a manos de un enemigo.

La escena de juego

La escena de juego no es propia. Ha sido extraída del paquete gratuito RPG Poly Pack – Lite de la Unity Assets Store y adaptado según lo requerido por la práctica. Entre otras adaptaciones, se han aplicado shaders a todas las texturas, tanto del escenario como de los personajes y los objetos, aplicando cel shading y un delineado grueso para dar un aspecto de dibujo animado.

Como tal, la escena dispone de una pequeña aldea en la que se desarrolla el juego y un entorno forestal sin mucho más que unos pocos objetos y enemigos repartidos, pero que ofrece la ventaja de poder huir de los enemigos si las cosas se tuercen.

Apuntado, disparo y ataque cuerpo a cuerpo

Para poder disparar el arco, es necesario cargarlo primero. Al hacerlo, el juego bloquea el movimiento del jugador para que no pueda girar con las flechas (sólo desplazarse lateralmente) y enfoca la visión utilizando una segunda cámara. Además, permite apuntar de manera libre a cualquier punto de la escena.

El HUD

Como en el caso de la práctica anterior, la interfaz de usuario muestra en todo momento la salud y el escudo del jugador, así como las llaves que ha conseguido. También muestra la cruceta y los mensajes enviados por el juego.

Tipos de personaje

A efectos de gestionar de manera transversal las características comunes entre jugador, enemigos y NPC, se ha creado una clase maestra que contiene las propiedades y métodos compartidos y que se apoya en una máquina de estados para manejar el tipo del jugador. Esta aproximación permite, entre otras cosas, poder cambiar fácilmente de tipo a un personaje y se implementa cuando un NPC neutral o aliado se convierte en enemigo al morir. E incluso permitiría al jugador controlar a un NPC o a un enemigo, así como a cualquier otra entidad a la que se extienda la clase.

Se han incluido los tipos siguientes:

  • Player. En este estado, se desactivan las automatizaciones y se activan el character controller y el resto de componentes necesarios para poder jugar.
  • Enemy. En este estado, el personaje deambula por la escena y ataca al jugador y a los NPC neutrales y aliados cuando pasan cerca.
  • Boss. En este estado, el personaje se comporta igual que un enemigo, pero añade la lógica de finalización del juego al derrotarlo.
  • Neutral. En este estado, el personaje deambula por la escena y huye cuando un enemigo pasa cerca.
  • Ally. En este estado, el personaje deambula por la escena y ataca a los enemigos que pasan cerca.

En el caso de los enemigos y los NPC (neutrales y aliados) se han añadido varios tipos con modelos y características diferentes (velocidad, daño, resistencia, etc.).

Objetos y llaves

Como en la práctica anterior, el juego incluye tanto objetos de curación como llaves repartidas por el escenario o dejadas por los enemigos al morir.

Animaciones y rigging

Todos los personajes están completamente disponen de animaciones para todas las posibles combinaciones, aunque no las utilicen, precisamente por la posibilidad de que cualquiera de ellos cambie de tipo. Además, se usan capas y animation events para poder controlar de manera fácil desde el código los momentos en los que se produce algún factor de interés en la reproducción de la animación.

También se ha implementado el animation rigging para el jugador, principalmente para hacer que tanto la cabeza como el torso del personaje miren suavemente hacia los objetos que tienen cerca, pero también para asegurar que el arco mira en todo momento a la posición correcta cuando se está apuntando.

Sistemas de partículas

Se han implementado partículas para un gran número de acciones: al ser golpeado, al morir, al recuperar salud, al convertirse en enemigo, etc.

Inteligencia artificial

Para implementar los objetivos relacionados con la inteligencia artificial, se utiliza una mezcla de NavMesh y de detección de colisiones. Todos los personajes disponen de tres maneras de detectar colisiones: con el collider incorporado al modelo a través del player controller o del capsule collider, con un trigger en un una esfera con un radio de cuatro metros (esfera interna) y por otra con un radio de siete metros (esfera externa). Además, disponen del componente NavMeshAgent para poder navegar por el terreno de manera autómoma.

Teniendo eso en cuenta, el flujo de un personaje normalmente es:

  1. En su estado inicial, a falta de objetivos, el personaje deambula por el escenario desplazándose entre puntos aleatorios con NavMesh.
  2. Cuando otro personaje entra en su esfera interna, lo añade a una lista de objetivos que utiliza para escapar (NPC neutral) o para saber a qué atacar (NPC Aliado, Enemigo y Enemigo final).
  3. Además, si el personaje es atacado por cualquier otro personaje, lo define directamente como objetivo forzado, independientemente de si está o no dentro del rango de detección.
  4. Mientras la lista contiene objetivos, el personaje comprueba qué personaje es el que está más cerca y en base a ello fija un punto de origen del cuál huir (NPC neutral) o fija un punto de destino para atacar (NPC Aliado, Enemigo y Enemigo final).
  5. Si el personaje alcanza a su objetivo, ataca siempre y cuando no exista una determinada distancia entre ambos.
  6. Cuando un objetivo sale de la esfera externa, el personaje lo elimina de la lista de personajes y deja de perseguirlo.
  7. Si la lista de objetivos se vacía, el personaje vuelve a deambular por el escenario.

 

Iluminación global

Finalmente, se ha hecho uso de la iluminación global y el baking para optimizar el uso de la iluminación en la escena de juego y mejorar el rendimiento general.

 

Problemas conocidos

En el momento de la entrega, se conocen los siguientes problemas:

  • Los sistemas de partículas asociados a los personajes y objetos se están renderizando por detrás de los elementos del terreno.
  • En la misma línea, las olas del agua que rodea la isla se reflejan en los personajes y enemigos repartidos por la escena.
  • Faltan sonidos para varios de los tipos de personajes.
  • El agua que rodea la isla no dispone de zona de muerte, por lo que es salir de la escena si se cae en ella.

Créditos

Paquetes completos

Fuentes

Música

Shaders

Sonidos

Referencias

C# – General

Unity – General

Animaciones – General

Animaciones – Interrupción

Animaciones – Rigging

Cinemachine

Iluminación

NavMesh

Shaders

Debate1en As above, so below

  1. Anna Zango Palau says:

    Como siempre, me encanta tu juego Salva! Me parece que has puesto una outline a los personajes con un Shader para que resalten, no? En plan cartoon, queda genial!! Por cierto, tus enemigos me parecen monísimos jajaja.

    También me parece muy buena idea como has planteado las tareas. Con perspectiva, debería haberlo hecho igual, porque ahora tendré que cambiar cosas de zero porque no las diseñé pensando en lo que haría falta. Muy buena planificación Salva!!

Publicado por

Programación 3D – PAC 2 – Zombie Invasion

Publicado por

Programación 3D – PAC 2 – Zombie Invasion

Hola a todos! En esta ocasión, os presento la entrega 3 de Programación 3D, el cuál consiste en un third person game en el que tienes que huir de una invasión zombie. Para ello, dispones tanto de una pistola como de una espada para defenderte de los zombies, y necesitarás hacer una buena exploración para encontrar la salida del pueblo y sobrevivir. Espero que os guste! Repositorio Gitlab: https://gitlab.com/ocapo/pro3-pec3-juego-plataformas-3d 3. ¿Serías capaz de desarrollar un juego de plataformas 3D? …
Hola a todos! En esta ocasión, os presento la entrega 3 de Programación 3D, el cuál consiste en un…

Hola a todos!
En esta ocasión, os presento la entrega 3 de Programación 3D, el cuál consiste en un third person game en el que tienes que huir de una invasión zombie.
Para ello, dispones tanto de una pistola como de una espada para defenderte de los zombies, y necesitarás hacer una buena exploración para encontrar la salida del pueblo y sobrevivir.
Espero que os guste!

Repositorio Gitlab: https://gitlab.com/ocapo/pro3-pec3-juego-plataformas-3d

Debate0en Programación 3D – PAC 2 – Zombie Invasion

No hay comentarios.