Circled – Un juego para Android hecho en Unity

El juego Circled es un mini juego hecho en Unity que consiste en un personaje flotando en el cosmos sujeto a un corazón y que está atrapado en un bucle infinito de anillos que se cierran sobre él. Los anillos tienen uno o dos extremos de salida y el jugador tiene que hacer clics en la pantalla para hacer que el personaje pueda escapar.

Objetivo del juego​

Evadir tantos anillos como sea posible para obtener la máxima puntuación.

MOVIMIENTO: CLICK EN PANTALLA PARA MOVERSE

Circled para ANDROID

MIRA MI EXPERIMENTO MÁS RECIENTE
👇
piston cylinder arrangement made in unity
(CLICK PARA VER EN YOUTUBE)

Sobre el desarrollo de este juego

El 2 de Octubre del 2020 se celebró la game jam Ludum Dare 47, un evento en el que hay que hacer un juego en 72 horas basado en una temática elegida por sorteo. El tema de la jam fue «Stuck in a loop» que significa atrapado en un bucle. Participamos en un equipo de tres personas.

La mayor parte del evento estuve transmitiendo en vivo lo que iba haciendo en mi ordenador y también las conversaciones que fuimos teniendo para ponernos de acuerdo. Transmití un total aproximado de 32 horas y en el siguiente vídeo puedes ver todas esas horas de trabajo resumidas en 5 minutos.

Brainstorming previo

Unos días antes de que empiece la jam nos reunimos a proponer ideas en base a las temáticas candidatas, eran tres rondas de votación con 16 temáticas cada una, tomamos la primera ronda y elegimos 4 temas al azar. Luego cada uno se tomó 5 minutos para pensar una idea con una mecánica simple. Casualmente el tema «Stuck in a loop» estaba entre nuestros elegidos así que para la jam ya teníamos una idea previa.

Arte

La estética general del juego está basada en el estilo Synthwave, con colores saturados y fuentes acordes a ese estilo.

Los sprites están hechos en estilo Pixel Art usando el software Aseprite.

Detalles técnicos

Este juego es un proyecto 2D desarrollado con el motor Unity.

Mecánicas

El personaje se controla pulsando en el lugar de la pantalla a donde se quiere mover el jugador. El personaje comienza a acelerar en esa dirección hasta llegar a una velocidad máxima y luego comienza a detenerse, esto hace que por cada pulso el personaje se mueva una distancia predecible.

Durante todo el juego se generan anillos concéntricos cada uno con el doble de escala que el anterior, hay distintos tipos de anillos que tienen una o más aberturas de salidas. Mientras el anillo está activo irá reduciendo su tamaño hasta hacerse minúsculo. El personaje debe desplazarse para poder escapar por las aberturas ya que, si es tocado por un anillo, el personaje muere.

Este es el primer juego al que le implementé un sistema de traducción el cual tiene un registro de cada texto que aparece en pantalla y arrays que contienen las traducciones para cada una, al pulsar el botón de cambio de idioma pasamos al siguiente idioma del sistema y este se encarga de actualizar cada uno de los textos en pantalla.

El juego está montando en dos escenas, la primer escena es la escena inicial del menú principal en la que también se puede ver la pantalla de créditos. Al pulsar el botón «Play» cambiamos a la escena del juego. Ya que en la escena del juego tenemos textos en pantalla, fue necesario pensar en un sistema para transferir datos entre escenas y así poder asignar el texto en el idioma apropiado.

En las versiones de Android y Windows el sprite del sol que aparece al fondo en la escena del juego cambia de tamaño dependiendo de la amplitud de la música, esto se hace leyendo un trozo de los bytes del clip de audio y promediándolos para sacar un valor que luego se relacionará a la escala del sprite. No es posible hacer esto en WebGL debido a que una de las funciones que nos permite analizar el clip de audio no se puede usar en WebGL. Una alternativa podría ser precalcular estos valores para cada canción y tenerlos organizados estos datos en listas para ir aplicándoselos a la escala del sprite.

En este juego se hace un guardado de datos usando PlayerPrefs para recordar cuál fue la puntuación máxima y actualizarla en caso de superarla.

Secured By miniOrange