Home » Análisis » Análisis: GameKit, los 10 frameworks en 1 de juegos 2D y 3D de Apple
GameKit Banner

Análisis: GameKit, los 10 frameworks en 1 de juegos 2D y 3D de Apple

Repaso histórico

Game Center

Año 2010, iPhone OS se convierte en iOS con la versión 4 en la Conferencia Mundial de Desarrolladores. Apple saborea las mieles de su éxito con el lanzamiento del iPad, un éxito sin precedentes solo equiparable al de los iPhone hacía tan solo 3 años. Y una realidad cada vez más palpable: los juegos son un protagonista absoluto en el App Store de Apple y una de las categorías de más peso a todos los niveles. Apple presentó ese año su primer framework propio para juegos: GameCenter. La, a día de hoy, mayor red social enfocada en juegos del mundo por número de usuarios.

Algunos desarrolladores no lo recordarán, pero en los primeros años de desarrollo en iOS hubo una norma muy polémica que impedía utilizar herramientas de terceros para generar apps para la App Store. Solo se permitía el uso de Xcode y el desarrollo nativo en Objective-C. La excusa que daba Steve Jobs es que para garantizar el rendimiento de las apps, el cumplimiento de estándares de diseño y desarrollo y un código máquina de calidad en los compilados, había solo que usar Xcode y Objective-C. Una filosofía que otros como Nintendo han mantenido durante años hasta no hace mucho: no permitir la publicación de productos que no estén desarrollados con los kit de desarrollo nativos de la plataforma.

Epic Games Unreal iOS 4

Fue Epic Games quien, bajo su cuenta y riesgo, quiso demostrar a Steve Jobs que se equivocaba y que podía desarrollarse con herramientas de terceros y no siempre nativamente y en Xcode: Mike Capps subió al escenario del evento especial de Apple del 1 de septiembre de 2010 y dejó a todo el mundo con la boca abierta cuando presentó “Project Sword”, la demo técnica que después se convirtió en “Infinity Blade”. Eso fue lo que Epic Games mostró a Steve Jobs para convencerlo: un producto que estaría en exclusiva en iOS a través de un port de Unreal Engine 3, uno de los middlewares más potentes en aquel momento. Y Jobs entonces ordenó eliminar la restricción de la App Store, gracias a un juego y a una apuesta del equipo de Epic Games.

3 años más tardó Apple en dar el siguiente e importante paso en cuanto a juegos se refiere: SpriteKit. El segundo framework de videojuegos de Apple era toda una declaración de intenciones que nació hace ya dos años de la mano de iOS 7. Sus orígenes están basados en una parte del equipo que dio vida al framework de código abierto Cocos2D, en el que basa gran parte de su estructura, contratados por Apple para crear algo que fuera más allá y que estuviera mejor integrado dentro del sistema. SpriteKit es el primer framework de Apple dedicado en exclusiva para el desarrollo de videojuegos, junto a SceneKit que en aquel momento solo estaba disponible para OS X y el kit para mandos de juegos.

Durante estos dos años hemos visto como una primera versión de SpriteKit era bastante productiva pero tenía incluso fallos capitales en su implementación como que las búsquedas por patrones no funcionaran correctamente. Su versión 2.0 corrigió muchas cosas pero añadió otros problemas como el hecho que el editor de escenas, uno de sus grandes añadidos, fuera poco práctico a nivel de usabilidad y bastante inestable.

Y ahora, por fin, tenemos entre nosotros SpriteKit 3.0. Una versión que va mucho más allá y por fin nos da herramientas tan deseadas como una gestión de texturas mucho más acorde al funcionamiento del sistema, un entorno multi-plataforma y multi-resolución, nuevos editores integrados y mejorados e incluso la posibilidad de serializar y tener en disco acciones o nodos por referencia.

GameKit

Pero es que ahí no ha quedado la cosa, porque en estos 2 años SpriteKit y GameCenter no se han quedado solos y el año pasado SceneKit y Metal llegaron a iOS. Y este año no solo Metal llega a OS X sino que ahora disponemos de la nada desdeñable cantidad de 10 frameworks creados para el desarrollo y explotación de videojuegos. Una integración completa dentro de una sola gran implementación que Apple ha llamado GameKit, con 10 framework o librerías para iOS y OS X con el objetivo de crear juegos 2D y 3D.

GameKit, 10 en 1

En total a día de hoy disponemos de los siguientes frameworks de desarrollo creados por Apple para crear o dar funcionalidad al ciclo de vida de un videojuego:

  • SpriteKit, versión 3.0 para desarrollo de juegos 2D casuales.
  • SceneKit, versión 2.0 para desarrollo de juegos 3D casuales.
  • Metal, versión 2.0, librería de bajo nivel de programación gráfica.
  • MetalKit, versión 1.0, para desarrollo de juegos 3D profesionales proporcionando una capa de gestión y explotación de recursos y dinámicas 3D sobre Metal, para cargas de vistas, modelos y demás componentes.
  • Metal Performance Shaders, librería de shaders optimizados y precalculados que se aplican en tiempo real, individualizando una versión específica optimizada para cada tipo de GPU.
  • Game Controller Kit, para integración de mandos de control bajo norma MFi (Made for iPhone)
  • GameplayKit, mecánicas de juego utilizables en cualquiera del resto de frameworks, incluyendo inteligencia artificial, máquinas de estado, búsqueda de caminos…
  • Model I/O, manejo y gestión de assets 3D con aplicación de efectos, luces, dinámicas, físicas…
  • ReplayKit, grabación de partidas de un juego y posterior posibilidad de compartirlos online, incluyendo edición básica y grabación de voz en off.
  • Game Center, explotación de la red social de juegos, incluyendo partidas online, logros, rankings, etc.

GameplayKit

Todos ellos están integrados entre sí de forma que podemos crear un juego en SceneKit que use SpriteKit (o viceversa), usar MetalKit o Model I/O para cargar recursos 3D y trabajar con ellos, aplicar shaders de Metal, usar las mecánicas de jugabilidad de GameplayKit, grabar las partidas con ReplayKit, activar logros en Game Center y usar un mando de control externo. Todo en el mismo proyecto y usando una única instrucción por fichero si usamos Swift:

Y además, como con iOS 9 ya no subimos el binario compilado sino el bitcode de nuestro juego (código intermedio) cuando un dispositivo que tenga Metal baje el mismo, SpriteKit, SceneKit y el resto se montarán sobre Metal para dar un extra de rendimiento al mismo. Y en caso de ser un dispositivo más antiguo, las librerías se montarán sobre OpenGL para funcionar sin problema. Todo ello sin que nosotros intervengamos.

Texturas GameKit Asset Catalog

De igual forma, toda la gestión de assets por dispositivos y las funciones de App Slicing que comentamos cuando hablamos de Xcode 7, son 100% aplicables a todo GameKit. De esta forma, podemos proporcionar los recursos gráficos o de cualquier otro tipo usando etiquetas, clasificado por dispositivos y calidades, aprovechando todo el potencial a través de estos assets que el sistema luego se encarga de transformar él solo en atlas de texturas.

Y por si no fuera poco, Apple ha creado e incluido toda una infraestructura de audio espacial basado en nodos de gran calidad, creando un nodo de sonido. Ahora podemos asociar sonidos a nodos, crear un nodo que represente el punto de escucha del juego (un listener) y cuando otros objetos con sonidos asociados se muevan alrededor de ese nodo listener o se acerquen y alejen, el sistema modificará los valores de volumen, intensidad sonora o espaciado, consiguiendo una mejor inmersión sonora. Además, se nos permite modificar valores que hasta ahora no podíamos tocar como el volumen o la frecuencia del sonido (para oírlo más grave o más agudo). Todo ello a través de acciones.

Nuevo editor de escenas de juegos

El editor de escenas de juegos ha recibido nuevas e interesantes funciones, además de las necesarias correcciones de funcionalidad. Ahora podemos incorporar muchos más elementos, como acciones a cualquier nodo e incluso crear un conjunto de acciones de referencia que se guardarán como fichero y que podremos cargar en nuestro programa o re-usar en cualquier otra escena aplicado a otros nodos.

De hecho, los nodos por referencia son unas de las grandes novedades porque podemos crear un background incluso animado en una escena y luego referenciarlo o repetirlo como un mosaico en otra escena a través de referencias. E igual con cualquier nodo o personaje que podemos crear una vez en una escena y usarlo en otras arrastrando y soltando.

GameKit Xcode 7

Si luego queremos cambiar cualquier cosa, solo tenemos que modificar la escena origen y sus elementos y todas aquellas donde hayamos usado dicho contenido cambiarán automáticamente, lo que nos permite ahora poder crear escenas de referencia con los personajes o elementos de un juego referenciados a modo contenedor y usarlos en cualquier otra escena. A nivel de memoria, las referencias funcionan a la perfección, pues por mucho que dupliquemos un objeto, un nodo, un sprite o una acción, esta no ocupará más en memoria pues siempre actuará en referencia a una de ellas.

Los nodos por referencia pueden ser usados tanto en programación como desde el editor, integran acciones y nodos en general con todas sus subclases, se pueden guardar a disco y, muy importante, cumplen el protocolo NSCoding que nos permite serializar al almacenamiento del dispositivo nuestros nodos y recuperarlos en cualquier momento, para grabar estados dentro del juego que luego podremos recuperar al volver a abrirlo o integrar una forma más simple y cómoda de grabar partidas dentro de un juego.

El nuevo editor también cuenta con una potente parte de gestión de acciones con un timeline que nos permite controlar no solo las acciones que queramos se apliquen interactivamente, si no incluso generar cinemáticas aplicadas a toda una escena. Podemos crear ficheros de acciones (un nuevo tipo de recurso) que nos permitan configurar, crear y probar no solo giros, movimientos o escalados: también podremos usar animaciones simplemente arrastrando y soltando todos los frames que compongan las animaciones de un personaje, crearles nombres y luego poder cargarlos desde el código si queremos. E incluso podemos usar texturas animadas de normales y conseguir que los efectos de luz se apliquen a cada fotograma de manera individual.

Editor GameKit Xcode 7 02

También en la parte de SpriteKit contamos con un nuevo nodo cámara, que nos permite crear un escenario mucho más extendido y tener una vista o portview dentro del mapa más amplio de juego y movernos por él. Podemos crear restricciones a la cámara para fijar por donde ha de moverse o no o que siga a nuestro personaje en su devenir por el escenario que hemos creado.

En el apartado de SceneKit, ahora podemos manipular los objetos 3D, alterarlos, duplicarlos y modificar las escenas que carguemos con un editor dentro de Xcode a la altura de editores embebidos de otras soluciones middlewares de desarrollo de juegos como Unity. Para los más expertos es obvio que será más limitado en cuanto a posibilidades, pero el objetivo de este no es construir (para eso ya usamos otras herramientas como Blender o Autodesk Maya) si no poder manipular de una forma sencilla lo ya construido y texturizado.

Además se integra a la perfección para poder aplicar cualquiera de los efectos o posibilidades que ofrecen los shaders o la modificación de los modelos a través de la herramienta Model I/O que integra GameKit, donde podemos crear nosotros directamente las normales de las texturas, aplicarles las sombras y especulares y darles efectos de todo tipo que consiguen un acabado o un toque mucho más realista e integrado de los objetos, con un mínimo consumo de recursos de CPU y GPU.

Un pequeño Unity o Unreal escondido dentro de Xcode 7

Lo que Apple ha hecho en Xcode 7 es crear una versión muy específica y práctica de cualquier tipo de solución middleware para desarrollo de videojuegos como Unity, Unreal, Source… Ha puesto al servicio del entorno herramientas de manipulación y previsualización en tiempo real que nos permiten trabajar, probar y crear animaciones, objetos, cinemáticas, efectos, shaders, luces… todo lo que queramos en tiempo de diseño y ha creado una herramienta de creación de juegos 2D y 3D de una enorme calidad.

GameKit SceneKit

Algunos neófitos de otros middlewares pensarán que no estará a la altura de las ya mencionadas, y tendrán toda la razón. Xcode 7 es una solución muy específica para el entorno Apple y más limitada que otros “grandes monstruos”. Pero aun así, es una herramienta de desarrollo de juegos en sí misma. Y que no tiene nada que envidiar a otras: sencilla, práctica y con infinitas posibilidades.

Y con la gran ventaja que todas estas tecnologías que hemos comentado no tienen por qué usarse solo con Xcode 7, ya que Epic Games (Unreal), Unity, CryEngine o incluso la propia Electronic Arts y su motor Frostbite, darán funcionalidad y servicio a componentes de este GameKit como Metal, MetalKit, Performance Shaders o incluso ReplayKit, llevando las posibilidades de videojuegos a nuestros Mac, iPhone, iPad, iPod Touch y, a partir de septiembre, a nuestros Apple TV.

Se vislumbra un panorama muy interesante en el mundo del desarrollo de videojuegos como industria cultural más relevante que es y Apple es uno más de los actores que aportarán calidad y producto de categoría. Aun estáis a tiempo de subiros a ese tren, así que trabajad y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Swift 3.1

Swift 3.1 ha llegado, análisis de todos sus cambios

Swift 3.1 ha llegado de la mano de la hornada de actualizaciones lanzadas por Apple. Analizamos sus cambios más importantes e incorporaciones más destacadas. Nuevas formas de convertir closures que no escapan en los que sí lo hace, conversiones seguras de números, genéricos más eficientes... descubre en nuestros análisis con ejemplos concretos todos los cambios y descúbrelos por ti mismo.