Energy Up: Creando los niveles

Para este proyecto los niveles y su estructura son una parte fundamental del proceso. La mecánica básica del juego se base en estos puzzles que debes resolver girando las plataformas del nivel. Casi podríamos decir que el resto: las trampas, los objetos, los efectos, etc, son mecánicas secundarias del juego que pivotan alrededor la mecánica principal.


El diseño de cada nivel tiene dos elementos clave: debe ser resoluble (debes poder conectar todos los bloques con el bloque de energía) y no bloquear al jugador en el proceso para que pueda seguir el camino por muy complejo que este sea. 

Una opción era construir un editor de niveles como una aplicación independiente que genere archivos JSON con la información de cada nivel. Seguramente para un proyecto más grande era la mejor solución, pero en este caso al ser un proyecto pequeño he optado por un proceso manual que permite simular el nivel en modo analógico, un Level editor kit.


Como todo, cada sistema tiene sus ventaja e inconvenientes. El sistema digital permite el diseño e implantación inmediata de cada cambio. El sistema analógico te permite centrar la atención en cada nivel y tener una visión de conjunto.




Una vez diseñado el nivel y traspasado al ordenador utilizamos un generados de código para que automáticamente nos rellene el array de datos y no hacerlo manualmente obteniendo un código como este:
 private void Level7()  
   {  
     GlobalInfo.actualLevelTime = 200;  
     GlobalInfo.actualLevelBlocks = 28;  
     GlobalInfo.actualLevelBlocksDone = 0;  
     GlobalInfo.actualLevelStars = 0;  
     GlobalInfo.actualLevel[1, 0].code = "30";  
     GlobalInfo.actualLevel[1, 0].energyFont = false;  
     GlobalInfo.actualLevel[1, 0].player = false;  
     GlobalInfo.actualLevel[1, 0].enemyCode = 0;  
     GlobalInfo.actualLevel[1, 0].itemCode = 0;  
     GlobalInfo.actualLevel[1, 0].trap = true;  
     GlobalInfo.actualLevel[2, 0].code = "33";  
     GlobalInfo.actualLevel[2, 0].energyFont = false;  
     GlobalInfo.actualLevel[2, 0].player = true;  
     GlobalInfo.actualLevel[2, 0].enemyCode = 0;  
     GlobalInfo.actualLevel[2, 0].itemCode = 0;  
     GlobalInfo.actualLevel[3, 0].code = "33";  
     GlobalInfo.actualLevel[3, 0].energyFont = false;  
     GlobalInfo.actualLevel[3, 0].player = false;  
     GlobalInfo.actualLevel[3, 0].enemyCode = 0;  
     GlobalInfo.actualLevel[3, 0].itemCode = 0;  
     ...  


Energy Up: Hoja de ruta

Han pasado dos meses desde mi último artículo así que ya era hora de retomarlo. He aprovechado este tiempo para terminar el motor del juego y implementar algunos niveles para ver como quedaba una vez pasado al dispositivo móvil.


En la versión actual están implementadas las tres mecánicas básicas:
  • Girar las plataformas para conectarlas con el emisor de energía.
  • Objectos potenciadores/modificadores de las condiciones del juego.
  • Trampas y puertas para crear zonas diferenciadas en los niveles.



Actualmente estoy en la fase de niveles, creando y observando como interactua el jugador con cada uno de ellos, cosa que ha provocado algunas necesidades imprevistas. Al crear los niveles se observa que hay tipos de plataformas que se utilizan mas que otras, cosa que obliga a crear más modelos para que la composición del nivel no se vean zonas repetitivas.


Para ello, utilizo un modelo como prefab padre de los cuales heredan todos los demás. Así al hacer algún cambio, se propagan hacia todos los modelos. A partir de aquí sólo hay que repartir los modelos entre categorías diferentes para poder crear los niveles.


Donde cada bloque tienes asignadas unas propiedades que internamente permite saber hacia que lados tienen conductividad energética, si contiene trampas, que paredes tiene bloqueadas, partículas de efectos, etc. y de esta manera poder definir la lógica interna de cada bloque respecto el nivel. 



Además hay que ajustar el tiempo necesario para cada nivel bajo circunstancias reales. En este caso el test es imprescindible desde un estadio temprano del proceso ya que la lógica del programa puede variar entre tipos de jugadores diferentes.

Antes de seguir con más fases del juego es tiempo de definir algunos niveles mas del juego para ver la robustez de las mecánicas y analizar si el equilibrio entre dificultad y jugabilidad esté bien ajustados. Después será tiempo de definir la economía del juego, la tienda virtual, los enemigos, el tutorial y otros elementos.

Como hacer copias de tu código de Unity con GitHub

Podriamos escribir un libro entero de las bondades de Git para el trabajo colaborativo y la gestión de versiones en un entorno como Unity. D...