rythm_game_tutotrial

en Tutoriales, UE4

Juego de ritmo utilizando AudioAnalyzer

Con este nuevo tutorial vamos a hacer un juego de ritmo muy sencillo utilizando nuestro plugin AudioAnalyzer para Unreal Engine 4. Intentaremos abordarlo desde un punto de vista tanto teórico como práctico, resolviendo los problemas que pueden surgir en este tipo de juegos.

Diseño y nivel principal
Interfaz de usuario
Game Actor

En un juego de ritmo el jugador debe interactuar con el juego utilizando su sentido del ritmo y su habilidad para presionar botones en un sequencia específica. En la mayoría de los casos esta interacción se realiza utilizando las manos pero tambien nos encontramos juegos que utilizan dispositivos creados específicamente para otras partes como los o incluso el cuerpo entero tan bien.

dancerush_stardom_machine
Dancerush Stardom machine

El juego

youtube_video_rhythm

En nuestro juego el jugador va a interactuar con una zona circular colocada en el centro de la pantalla.

game_preview

Los pulsos viajan desde el lado izquierdo hacia el derecho siguiendo una trayectoria que atraviesa esta zona circular. El jugador debe intentar pulsar esta zona cuando el pulso se encuentra dentro para incrementar su puntuación. Si falla, la puntuación sufrirá una penalización.

Vamos a llevar el tracking solo de la banda de baja frecuencia para generar las esferas de los pulsos , en un juego completo podemos poner más zonas con las que interactuar y llevar el tracking de multiples bandas de frecuencia, como las de medias-bajas y medias-altas, y generar los pulsos para cada una de las zonas de manera independiente. Puede convertirse en un gran reto para el jugador

El proyecto de UE4

Comenzamos creando un nuevo proyecto vacio.

create_ue4_proejct

Una vez tenemos el plugin instalado para nuestro engine nuestro siguiente paso es activar el plugin AudioAnalyzer en Editor > Plugins.

audioanalyzer_plugin

Ahora podemos ir creando una carpeta donde vamos a colocar nuestra música. Esta carpeta necesita ser incluida manualmente a la lista de directorios a incluir cuando se empaqueta el juego. En Packaging > Additional Non-asses Directories to Package podemos añadir nuestra nueva carpeta.

audio_folder

En esta carpeta podemos ir poniendo ya un fichero de audio de ejemplo, vamos a escoger uno con la frecuencias en las que vamos a realizar el tracking muy claras para facilitarnos la calibración del juego. Después de esta calibración podemos testear el juego con una canción real.

audio_sample

Tenemos que empezar creando una clase blueprint con clase base Audio Analyzer Manager . Click derecho en carpeta content > Blueprint Class > Buscamos la clase AudioAnalyzerManager > Select

audio_manager_class

Esta instancia Blueprint se utilizará para construir nuestros objetos Audio Analyzer Manager.

bp_audiomanager

El encargado de controlar la lógica del juego será un objeto Actor (tserá nuestro blueprint BP_Game), el mapa del nivel solo contendrá este actor y una camara.

game_structure

El BP_Game tendrá que contener los widgets de la interfaz gráfica y otro Actor, el BP_Game_dealer, esta clase se encargará de ir generando los Actores que representarán los pulsos (BP_Game_dealer_beat).

Vamos a crear dos objectos para gestionar el audio (BP_AAManager), uno para reproducir la canción y otro para llevar el análisis unos segundos por delante de la posición de reproduccion. Para reproducir otros sonidos que no requieren ningun análisis como los efectos en los botones del menu utilizaremos el motor de audio del unreal engine.

aamanager_variables

Podríamos crear ambas variables directamente en el blueprint BP_Game pero envez de eso vamos a utilizar el objeto GameInstance para guardar estas variables.

Para crear el objeto de instancia del juego hacemos click derecho en el explorador de contenido > Blueprint Class y buscamos GameInstance.

La instancia de juego no se destruye al cambiar los niveles, para este juego en concreto nos da un poco igual esta funcionalidad, pero si piensas tener, por ejemplo, un nivel para el menu inicial y diferentes niveles de juego esta es la manera correcta de abordarlo. Otra ventaja de este objeto es que se puede acceder a el desde cualquier otro blueprint, esto puede resultar muy útil.

Por lo tanto vamos a crear una clase GameInstance con los dos gestores de audio, las rutas a los ficheros de audio, la puntuación, y una referencia a nuestro actor principal del juego (la instancia BP_Game), esta referencia nos resultará muy útil para utilizar los métodos de este actor desde el widget de la interfaz de usuario sin tener que pasarle la referencia directamente, por ejemplo para pausar y reanudar la reproducción del audio..

gameinstance_variables
Our game instance variables

Para acceder a estas variables dedde cualquier blueprint tenemos que obtener la instancia con el nodo GetGameInstance y realizar un cast a nuestra implementacion específica de la instancia de juego.

gameinstance_cast
Obtaining score from our game instance

Vamos a añadir un método para construir (Construct Object from Class) nuestros gestores de audio, estableciendo la misma instancia de juego como Outer class. Este método será llamado cuando el juego comience y enlazará el tiempo de vida de los gestores con el tiempo de vida de la instancia de juego.

construct_aamanagers

Una vez hemos terminado la creación de la instancia de juego tenemos que seleccionarla en la configuración de proyecto. Maps & Modes > Game Instance > Game Instance Class

gameinstance_project

Podemos Guardar el nivel y establecerlo como nivel por defecto del juego, en esta misma sección, antes de ponernos con el diseño de la interfaz de usuario y el actor principal del juego.

default_maps

Ahora podemos continuar con la parte más interesante del desarrollo de videojuegos.

browser_content_1
Browser content at the end of this tutorial

Continúa en Parte 2: Interfaz de usuario

Tutorial files

Ayudanos con este blog!

El último año he estado dedicando cada vez más tiempo a la creación de tutoriales, en su mayoria sobre desarrollo de videojuegos. Si crees que estos posts te han ayudado de alguna manera o incluso inspirado, por favor considera ayudarnos a mantener este blog con alguna de estas opciones. Gracias por hacerlo posible!

Escribe un comentario

Comentario