recrear remasterizar videojuegos 3D Unity programación
21
junio
2021

Análisis de juego y creación de proyecto, primer artículo de la serie: “Proyecto de recreación de juego clásico de los 80”

Muy a menudo resulta difícil elegir qué juego hacer como proyecto. Sin embargo, esto es necesario para poder poner en práctica los diferentes conocimientos que requiere crear un videojuego en cualquier plataforma incluida Unity3D.

El primer proyecto es además especialmente relevante. Es importante elegir un juego cuyas mecánicas podamos implementar y que resulte entretenido. A tal efecto, siempre es recomendable elegir al principio juegos simples e incluso básicos, aunque puedan resultarnos menos atractivos. Esto nos permitirá:

  • poner en práctica lo que sabemos
  • completarlos en un tiempo razonable
  • ganar experiencia y confianza para realizar otros proyectos

En esta serie de videos afrontamos un proyecto de recreación de un videojuego clásico de la época de los ordenadores de 8 bits. El juego se llama Netherworld y fue creado en 1.988 para el ordenador Commodore 64 por un único desarrollador finlandés de nombre Jukka tapanimäki:

Análisis de juego y creación de proyecto netherworld unity 3d
Carátula original del juego para ZX Spectrum

Si estás interesado en ampliar tus conocimientos en el área creación, desarrollo y diseño de videojuegos, visita nuestros cursos de videojuegos

Primeramente, vamos a examinar las mecánicas de juego, los gráficos y el mapa del primer nivel.

El juego es un Arcade en 2D en el que manejamos una nave en el espacio con capacidad de moverse arriba, abajo, izquierda y derecha (scroll bidireccional) disparando simultáneamente en las cuatro direcciones.

Análisis de juego y creación de proyecto unity 3dAnálisis de juego y creación de proyecto unity 3d 8

Imagen del juego en sus versiones para Commodore 64 y ZX Spectrum.

El objetivo del juego en cada nivel es recuperar todos los diamantes que están diseminados por el mismo con el fin de pasar al siguiente nivel antes de que se termine el tiempo o nos quedemos sin escudo y resultemos destruidos igualmente.

Análisis de juego y creación de proyecto unity 3d 7
Mapa del primer nivel del juego

El nivel está habitado por las siguientes entidades:

  • Cabezas de dragón à Son enemigos estáticos que disparan burbujas de ácido y espumarajos que quitan un punto de escudo si alcanzan nuestra nave. Estos enemigos son inmunes a nuestros disparos, pero no las burbujas. Estas pueden destruirse mediante nuestros disparos soltando a veces puntos o ventajas (power ups) tales como:
    • Rompebloques à Permiten destruir bloques de paredes al golpearlos para acceder a lugares donde puede haber diamantes.
    • Rompehuesos à Permiten destruir a los enemigos al golpearlos con la nave.
    • Velocidad extra à Aumenta la velocidad de la nave durante cierto tiempo
    • Invulnerabilidad à Hace que la nave sea invulnerable durante cierto tiempo.
    • Sorpresa à Hace que la nave deje de responder y disparar, o que sus controles se inviertan durante cierto tiempo dejándonos indefensos.
  • Minas móviles à Son máquinas que se mueven siguiendo un patrón y que nos restarán un punto de escudo si nos golpean. Son invulnerables a nuestros disparos.
  • Diamantes à Debemos recoger todos los presentes en el nivel para poder pasar al siguiente. El juego muestra un contador en el que se indica la cantidad de diamantes recogidos y los que se encuentran en el nivel.
  • Relojes à Aumentan el tiempo de juego 30 segundos.
  • Agujeros de gusano à Permiten saltar instantáneamente de un punto a otro del mapa, y una vez conseguidos todos los diamantes nos permiten pasar al siguiente nivel.

Empezamos creando un nuevo proyecto de Unity para un juego 2D.

Análisis de juego y creación de proyecto unity 3d 6

Creamos el GameObject de la nave a partir de un spritesheet con una secuencia de imágenes para generar una animación que muestre la nave con un anillo rotante como en el juego original:

Análisis de juego y creación de proyecto unity 3d 5
Spritesheet con la animación del gráfico de la nave del jugador

Para el movimiento de la nave empleamos un sencillo script en el que recogemos la pulsación de los cursores de teclado y modificamos las coordenadas de la nave. Para conseguir que el gráfico de la nave se oriente a la izquierda o derecha al desplazarse alteramos la orientación del GameObject mediante una rotación de +90º / -90º al eje Z.

void Update()
{
Vector3 desplazamiento = Vector3.zero;
if ( Input.GetKey(KeyCode.UpArrow))
{
desplazamiento.y = +1.0f;
}
if (Input.GetKey(KeyCode.DownArrow))
{
desplazamiento.y = -1.0f;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
desplazamiento.x = -1.0f;
transform.rotation = Quaternion.Euler(0.0f, 0.0f, 90.0f);
}
if (Input.GetKey(KeyCode.RightArrow))
{
desplazamiento.x = +1.0f;
transform.rotation = Quaternion.Euler(0.0f, 0.0f, -90.0f);
}
transform.Translate(desplazamiento * Velocidad * Time.deltaTime, Space.World);
}

El GameObject de la nave es incorpora un colisionador circular 2D (Circle Collider) y un cuerpo rígido (RigidBody2D) para permitir las colisiones contra otros elementos del juego:

Análisis de juego y creación de proyecto unity 3 4
GameObject de la nave con el colisionador circular

El movimiento de la nave es acompañado por el de la cámara mediante un script que la posiciona con cada cuadro en las mismas coordenadas X, Y que la nave del jugador, pero en Z = -10:

Análisis de juego y creación de proyecto unity 3d 3
Imagen de la GameObject de la nave en Z = 0, y la cámara situada en misma X,Y pero Z=-10

Para ello empleamos un simple script que emplea el evento LateUpdate() para posicionar la cámara justo tras la ejecución del método Update() de todos del resto de scripts:

void LateUpdate()

{

        Vector3 posicion_camara = nave.position;

        posicion_camara.z = -10.0f;

        transform.position = posicion_camara;

}

En el siguiente video recrearemos el escenario del primer nivel para situar los enemigos y empezar a mover la nave del jugador entre las nubes de ácido.

Otros episodios de la serie:

Si estás interesado en ampliar tus conocimientos en el área creación, desarrollo y diseño de videojuegos, visita nuestros cursos de videojuegos

Author

Ángel Aguinaga

Profesor de Programación y Bases de Datos de la Sede Bilbao. Formador experimentado en áreas como .Net, Java, BB.DD., Python, Desarrollo y programación Web.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Recibe de primero nuestras ofertas de empleo y noticias