En Pixela creamos la iniciativa “Re-Spawn”, una serie de proyectos donde buscamos trabajar con las tecnologías más recientes que pueden tener un gran impacto y alcance en el mundo. Así que, como parte de nuestra primera aplicación, nos propusimos crear un juego de fútbol completamente único. El resultado final es un proyecto que utiliza la Realidad Aumentada e Inteligencia Artificial de una forma combinada para crear algo totalmente nuevo. Y mientras discutimos la experiencia de trabajar con estas tecnologías en artículos distintos, esta vez nos enfocaremos en qué se siente programar un videojuego, y cómo es totalmente diferente de lo que uno pensaría.
Pensando de manera distinta:
Durante toda mi vida soñé con programar un videojuego, lo cual influyó grandemente en mi decisión de ser un programador. Sin embargo, con el paso del tiempo, empecé a ver todo de una manera muy objetiva y cuadrada cuando se trataba de programar. Me dediqué a desarrollar código que diera un resultado muy exacto, y aunque los videojuegos también requieren esto en cierta medida, también hay un factor muy importante que ocupará un 80% del desarrollo: ¿Cómo se siente algo?.
Mi tarea al trabajar en este proyecto consistía en desarrollar un juego de fútbol. Y mientras resulta ser fácil programar patear una bola a la derecha, también era mi deber decidir ¿Qué tanto a la derecha debe ir la bola después de ser pateada? ¿Qué tan rápido debe ir? ¿Qué tanta distancia debe atravesar? ¿Cómo se debe sentir? Todas estas son cosas subjetivas que cambiaron mi forma de ver la programación.
Los primeros pasos:
Para desarrollar la aplicación utilizamos un programa llamado Unity, un motor de juegos muy potente e ideal para dispositivos móviles. Sin embargo, al no tener un conocimiento profundo sobre programar videojuegos tuvimos que pasar por un gran proceso de iteración. Se programaba algo pequeño, lo probábamos todos como equipo, y luego discutíamos qué se sentía bien, y que no. Luego hacíamos modificaciones y repetíamos este proceso de nuevo. Al inicio empezamos con cosas simples, como aplicarle fuerza a una bola.
Y conforme más íbamos aprendiendo de Unity, íbamos agregando toques extras, como poder hacer tiros curvos o incluso añadirle un efecto de “cola” a la bola al momento de hacer un tiro.
Sin embargo, este proceso iterativo hizo que cambiaramos muchas veces el cómo controlar la bola. Esta pasó de estar en un punto fijo a seguir siempre la trayectoria del dedo de un jugador, y también cambiamos completamente la mecánica de hacer tiros curvos, pasando de dibujar una “C” en la pantalla a girar la bola en círculos antes de hacer el tiro. Todo ello iba siendo consecuencia directa de la pregunta ¿Qué se siente mejor, como jugador?
La importancia de la perspectiva
Programar un videojuego se basa en la retroalimentación visual. Lo que yo haga con los controles debe verse reflejado de una forma natural dentro de lo que ocurra en el juego. Sin embargo, esto presentó una gran cantidad de problemas, principalmente con respecto a la perspectiva de la cámara. Muchas veces el juego hacía justo lo que le decíamos, pero podía parecer que no era el caso. Por ejemplo, aquí estamos posicionando la bola a la izquierda de la portería y luego hacemos un tiro recto hacia arriba (los dos cuadros blancos representan la dirección del swipe):
Sin embargo, al soltar la bola, parece que en vez de moverse en línea recta se mueve a la derecha, justo hacia el centro de la portería. ¿Entonces qué es lo que está ocurriendo? Después de un tiempo descubrimos que, en realidad, sí se hace un tiro en línea recta. Tan solo pareciera que no es el caso debido a que la cámara maneja una perspectiva con un punto de fuga.
Un punto de fuga es un punto en específico dentro de una imágen donde los elementos convergen para dar una sensación de profundidad. Como podemos observar, mientras más alejado esté un objeto de la cámara, más dará la impresión de que se posiciona en el centro de la imagen. Y es justo esta cuestión de perspectiva la que hace que parezca que la bola se mueve al centro de la portería cuando en realidad se está haciendo un tiro en línea recta.
Para solucionar esto se diseñó un sistema que, además de tomar en cuenta la dirección del tiro de la bola, también identifica en qué posición está la misma para calcular hacia dónde debería dirigirse sin hacer que parezca que siempre va a terminar en el centro de imágen.
Aunque al inicio tomar en cuenta todos estos elementos resultaba complicado, conforme la aplicación avanzaba iba siendo más natural tener todos estos detalles en mente. Tan solo basta con preguntarse “¿Cómo se verá esta acción reflejada en base a la perspectiva de la cámara?”, y ajustar el código en base a ello. Nuevamente, la objetividad dejó de tener un rol primario al programar el videojuego, y nos centramos en lo que se sentía mejor.
La fórmula para crear un videojuego:
Muchas veces como jugadores puede resultar fácil pensar que hay una fórmula exacta para crear un videojuego. Que los estudios desarrolladores siguen una serie de pasos establecidos hasta llegar a una experiencia única. Sin embargo, la realidad es que si alguien quiere programar un videojuego estará entrando en una laboriosa tarea que requiere de mucho esfuerzo, pruebas, errores e iteraciones. No hay una manera exacta de hacerlo. Si bien todos podríamos usar un programa que funcione como una calculadora y concordar en que 2 + 2 debe dar como resultado 4, cada quien tendrá una concepción distinta de qué tan alto y rápido debe saltar un jugador al presionar una tecla en específico. Al final todo se trata de intentar programar lo que resulte más natural, y confiar mucho en instintos propios.
Una experiencia única:
Programar este juego nos llevó varios días, muchas pruebas y varios momentos en donde pensé que no se podría lograr. Tuvimos que dejar la objetividad de un lado para enfocarnos en el lado creativo del proceso, y mientras pudo ser un proyecto lleno de estrés, también estuvo lleno de bastante aprendizaje. Así que ¿recomendaría que aquellos que aspiran programar videojuegos persigan este sueño? Absolutamente. Fue algo que definitivamente valió la pena, y algo que veo como un punto de partida para hacer cosas aún más grandes y geniales dentro de Pixela. Cada momento podía ser muy laborioso pero también sumamente increíble, y aunque es completamente distinto programar un juego a jugarlo, creo que se puede encontrar el mismo nivel de satisfacción en ambos casos.
Tecnologías Emergentes • AR Foundation • Unity
Trabajando Con Realidad Aumentada
Crear una experiencia en AR podría sonar relativamente simple, pero el flujo de trabajo también incluye Inteligencia Artificial y tecnologías de videojuegos.
Android, Mobile Development, Jetpack Compose
Creando una animación de sonido con Jetpack Compose
Crear animaciones en cualquier framework puede parecer una tarea complicada, pero Jetpack Compose lo hace fácil.
Android, Mobile Development
Jetpack Compose: enamorándote de Android otra vez
Android como SDK ha tenido muchos cambios que han sido para bien, pero realmente sentía que Android se estaba quedando atrás. Todo esto cambio con el lanzamiento de Jetpack Compose
Announcements
Presentamos Re-Spawn
Nuestra primera incursión en el mundo de la creación de contenido audiovisual.
Mobile / Flutter
Manage your app content with Flutter and Prismic.io
There are many ways to provide content for our apps and websites, we show you how to use our very own implementation of Prismic IO in your flutter app.
Nuevas Tecnologías, Inteligencia Artificial
Gran poder en la palma de tu mano: usando Inteligencia Artificial para construir experiencias de A.R en Android.
La inteligencia artificial juega un papel fundamental en la creación de aplicaciones de Realidad Aumentada.