HELL to the King

«HELL to the King» es el nombre de mi prototipo para la segunda Práctica de Evaluación Continua (PEC2) 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 shooter en primera 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 – PEC2 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 llegar hasta el final del nivel, acabando con tantos demonios como sea posible, y haciéndose con las llaves que permiten acceder a varias zonas inaccesibles.

El jugador disponer de varias armas, cada una de ellas con sus propias características,

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 izquierdo del ratón dispara.
  • La rueda del ratón permite cambiar el arma activa.
  • 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 todas las tareas obligatorias y gran parte de las opcionales, aunque por falta de tiempo no ha podido llegarse a todo cuanto se esperaba.

A modo de resumen:

URP

El proyecto de Unity se creó utilizando la plantilla 3D URP para habilitar URP desde el principio y evitar así problemas en caso de querer cambiar la render pipeline en fases posteriores. Pese a ello, debido a que muchos de los assets disponibles de manera gratuita no disponen de versión URP, fue necesario modificar el pipeline en un gran número de materiales para poder aprovechar los recursos. De hecho, un gran número de assets de terceros fue desestimado porque requerían rehacer manualmente sus shaders para poder utilizarlos.

Armas

Para completar tanto el objetivo obligatorio como el opcional, se han creado tres armas diferentes:

Guitarra (pistola)

  • Automática: no
  • Cadencia: baja
  • Daño: equilibrado
  • Retroceso: leve
  • Velocidad de recarga: baja

Bajo (ametralladora)

  • Automática: sí
  • Cadencia: alta
  • Daño: bajo
  • Retroceso: medio
  • Velocidad de recarga: alta

Micrófono (escopeta)

  • Automática: no
  • Cadencia: muy baja
  • Daño: muy alto
  • Retroceso: alto
  • Velocidad de recarga: alta

Enemigos

De igual modo, también se han creado tres tipos de enemigos, utilizando modelos diferentes y atribuyéndoles valores diferentes en la cadencia y en el daño. A uno de ellos, además, se le ha dado la condición de francotirador, que le permite no sólo disparar desde más lejos utilizando una mira de láser, sino también estar continuamente observando al jugador desde el momento en el que entra en esfera de colisión.

El resto de enemigos utilizan la inteligencia artificial mínima que se solicitaba en el enunciado de la práctica, patrullando una zona determinada y buscando al jugador en caso de que pase muy cerca.

Además, todos los enemigos desaparecen lentamente al morir.

Pantallas

Debido a la falta de tiempo, sólo ha podido completarse la pantalla requerida por las tareas obligatorias, que consta de una zona montañosa, una zona urbana (en ruinas) y una zona interior.

Salud, escudo, munición y HUD

El jugador dispone de una barra de escudo que absorbe la mayor cantidad del daño, aunque no evita que una parte se consuma de la salud.

Durante la partida, el jugador puede ver en todo momento la salud, el escudo y la munición del arma equipada en el HUD de la parte superior de la pantalla.

Objetos

El jugador puede encontrar objetos repartidos por la pantalla o dejados por los enemigos al morir que le permiten recuperar salud, escudo y munición.

Puertas y plataformas móviles

En lo referente a las puertas, se ha creado una única puerta con tres comportamientos diferentes posibles:

  • Automática: se abre cuando el jugador pasa cerca.
  • Bloqueada: el jugador necesita una llave para abrirla.
  • Cronometrada: el jugador debe encontrar la placa de presión que la activa y llegar a ella antes de que se cierre.

También se han incorporado plataformas móviles que permiten al jugador desplazarse de manera horizontal y vertical.

Puntos de control y zonas de muerte

Por falta de tiempo, no ha sido posible incorporar puntos de control o zonas de muerte. No obstante, sí se incorporaron en la práctica anterior, por lo que su ejecución hubiera sido la misma.

Música y sonido

Se ha añadido música de fondo tanto a la escena del menú principal como a la de juego y se han añadido sonidos a las diferentes acciones que se suceden: disparar, abrir puertas, recoger objetos, etc.

Escenas

Finalmente, además de la principal, el juego dispone de una única escena adicional, la del menú principal.

Pendientes

En el momento de la entrega, se dejan como pendientes las siguientes tareas e intenciones:

  • Implementación de los puntos de control
  • Implementación de las zonas de muerte
  • No se han podido subir todos los sonidos de los que se disponía, incluyendo voces del personaje y de los enemigos que ya se encontraban grabadas.
  • Retoques finales a los atributos de los enemigos para ajustar la dificultad.

Elecciones de diseño

  • Se ha optado por hacer desaparecer a los enemigos reduciendo su tamaño en vez de haciendo un fade por una cuestión puramente visual. No obstante, el código para hacer el fade está igualmente implementado y se ha conservado en el código a pesar de no estar siendo utilizado.
  • Se ha optado por mostrar el final de juego y de partida directamente en la escena de juego, sin crear una escena adicional, por una cuestión de economía de recursos.

Créditos

Paquetes completos

Fuentes

Imágenes

Sonidos

Referencias

General

Colisiones y raycast

NavMesh

Partículas

Render pipelines

TextMesh Pro

Deja un comentario