Cinco cosas buenas y cinco no tan buenas de Unity 3D

Vídeo del juego actualizado al oficial. Nota de prensa de El País.

Web del juego Math Combat Challenge.

Nota 02-10-2017: el juego original Mathness 3D ha evolucionado, y cambiado de nombre. Ahora se llama Math Combat Challenge y está inpirado en una novela.

Puedes ver  el vídeo en la imagen inferior.

Hoy voy a hablar de Unity 3D, y mis impresiones con esta herramienta tras un año y medio de uso. Es poco tiempo, pero está siendo muy intensivo, con varios juegos en 2D y 3D desarrollados, aparte de Mathness 3D, que es sin duda un capítulo aparte.

Estas impresiones son mías, personales y fruto de mi experiencia con la herramienta. No pretenden sentar cátedra ni negar otras ideas o posibilidades. Unity 3D es muy potente y cada cual trabaja con la herramienta según sus gustos y procedimientos, todos ellos válidos siempre que el producto final tenga la calidad requerida en el tiempo requerido. Ese es el objetivo primario que nunca ha de olvidarse. Vamos pues.

image_panel
Imagen de Mathness 3D, actualmente en desarrollo

Mi experiencia con videojuegos

Soy informático de la vieja escuela, como suele decirse, combinando mi trabajo de desarrollador de gestión en el sector banca y seguros con los videojuegos. No llegué a tocar los Spectrum, pero sí los Amstrad CPC-464 y los Spectravideo 328, que fueron los padres del famoso MSX, reyes de los ochenta y los ocho bits. En aquellos años desarrollé varios juegos sencillos que no llegué a publicar, porque estaba en otras cosas como intentar sobrevivir y salir adelante.

Años más tarde, con la explosión de los juegos para el iPhone, me animé de nuevo, y esta vez sí saqué algunos juegos. El más importante fue AWACS Tactical Simulator, un juego de estrategia en el que había que controlar un grupo de aviones, barcos, y unidades terrestres en diferentes zonas del mundo. Éramos un equipo de cinco personas enamorados de la aviación y la estrategia. El juego era complejo, adaptado a gente fanática de la aviación, y todavía puede verse la web, vídeos, material, etc. Fue retirado recientemente por motivos técnicos, concretamente, la herramienta Cocos2D 1.01 era casi imposible de actualizar a la versión 3.0, necesaria para las últimas versiones de iOS.

Luego desarrollé un juego 2D para iOS y Android con Spritebuilder llamado Mathness (el primero, sin el 3D), un juego que combinaba matemáticas y lucha contra las malvadas letras. Era un juego sencillo, y el origen del posterior Mathness 3D.

El mundo en Unity 3D

Y aquí es donde entra Unity 3D. ¿Cómo llegué a esta herramienta? A través de una empresa me pidieron juegos en 2D y 3D para asistencia médica a personas con problemas neurológicos. La idea es que estos juegos especiales pudieran correr en todo tipo de plataformas, y requerían versiones 3D. Pero había otro requisito: en el futuro, poder desarrollar programas de realidad virtual (VR) para Oculus Rift, Microsoft Hololens, y otros sistemas similares.

Estuve viendo el motor Unreal, y era genial, fantástico, maravilloso, potente. Basado en C++, cualquier cosa se puede hacer con garantías de calidad. Pero tiene un problema: requiere de un equipo de personas, y yo trabajo generalmente solo, al menos como programador. No es que Unreal sea complejo, que lo es, es que no da las facilidades de Unity. Unity 3D parecía la solución, y luego además sus diseñadores comenzaron a preparar claramente para VR llegando a un acuerdo con Oculus y con Microsoft. La solución era así clara: Unity 3D.

Comencé hace año y medio aproximadamente a preparar esos programas médicos, y me di cuenta enseguida del enorme potencial de la herramienta, y entendí también su éxito. Porque Unity 3D es fácil de usar, yo diría que demasiado fácil, y de ahí las quejas de mucha gente que ve publicar miles de juegos absurdos hechos por aficionados. Pero Unity es mucho más que una simple plataforma de desarrollo: es un sistema eficaz para crear cualquier cosa que se te ocurra en una fracción de tiempo en relación a otros sistemas. Veamos por qué.

Unity Splash

Ventajas del uso de Unity 3D

1. Fácil de usar. Es una herramienta con la que estás creando contenido al momento. Su curva de aprendizaje para crear juegos básicos y sencillos en 2D y 3D es rápida. Naturalmente, Unity es una herramienta que requiere años de experiencia para conocerla a fondo, para obtener todo el rendimiento y posibilidades, eso nadie debe dudarlo. Pero también es cierto que conociendo el 20% de las posibilidades de la herramienta se pueden desarrollar juegos de nivel medio interesantes y divertidos, siempre claro está que la idea del juego sea buena, ese es otro tema.

2. Dos lenguajes para los scripts. En realidad son tres, pero los más populares son Javascript y C#. Mucha gente conoce Javascript, con lo que en este caso ya tienen eso adelantado. Yo sin embargo recomiendo encarecidamente usar C# al ser un lenguaje más robusto y con un modelo de orientación a objetos muy bueno, además de todo lo bueno que tiene C# como lenguaje moderno y seguro. A mí me ha salvado de varios sustos que por ejemplo en C++ pueden hacerte perder una tarde o incluso un día de trabajo.

3. Arrastrar y soltar para referenciar y casi todo. Este aspecto es criticado por muchos, pero yo lo veo muy interesante. Consiste en que, cuando un objeto dispone de referencias a otros de forma pública, estos objetos pueden arrastrarse al primero físicamente, con lo cual se establece la referencia a ese objeto en tiempo de diseño. Cuando se ejecuta el programa, no hay que referenciar ese objeto, ya está hecho. Está bien para juegos sencillos o medianos. En juegos complejos prefiero crear las referencias en tiempo de ejecución, sobre todo si hay muchas referencias en un objeto. Eso enlentece la operación claro, pero es más cómodo. Puede usarse una combinación de técnicas, que es lo que hago yo según la situación. A veces es interesante integrar componentes en tiempo de ejecución, pero yo soy bastante dado a dejarlo todo listo y estructurado en tiempo de diseño. Como siempre, la experiencia te dará la directriz, pero creo que es un acierto. También muy interesante poder añadir los llamados “componentes” en tiempo de diseño para tener el objeto completo a nivel de edición, por ejemplo, los sonidos que va a tener, si el objeto se ve afectado por la física, si debe detectar colisiones, cómo hacerlo y el área implicada, y mucho más. Actualmente combino ambas técnicas, lo cual permite grandes posibilidades. Es genial.

4. Asset Store. Unity 3D tiene sin duda la tienda más completa de complementos para los juegos. Desde escenarios, armas, sonidos, módulos de control de cualquier cosa, y un sinfín de elementos que permiten crear juegos visualmente impactantes. Estos assets permiten rebajar en gran manera el desarrollo de un juego, y a mí y a miles de desarrolladores nos han ahorrado cientos de horas de trabajo. Ahora bien, como todo, se puede abusar. Muchos desarrolladores se bajan un asset, lo implementan cambiando cuatro cosas, y ya tienen un juego a la venta. Naturalmente esto crea dos cosas: primero, juegos muy sencillos, y segundo, juegos repetidos, si varios hacen lo mismo. Además, para aprender es mejor realizar esas funciones a mano aunque no sean tan sofisticadas, porque entonces ves cómo funcionan las cosas por dentro. Como siempre, la solución está en el equilibrio.

5. Multiplataforma. La verdad es que siempre he sido reacio a los productos “milagro multiplataforma”. He visto software anterior que generaba código para Windows y Mac, o iOS y Android, con resultados muchas veces lamentables. Unity 3D gestiona muy bien este tema, y las pruebas que he hecho hasta ahora permiten desarrollar bien en todas las plataformas. Pero atención, si un juego es gráficamente potente y muy complejo, ejecutarlo en un dispositivo móvil no va a dar el mismo resultado que con una tarjeta gráfica de PC de última generación con un Intel I7 a 3 Ghz. Este es un error en el que cae mucha gente. La herramienta es multiplataforma. El juego no siempre va a serlo, y muchas veces debes trabajar para los binomios Windows/Mac o iOS/Android.

Desventajas del uso de Unity 3D

No todo son ventajas claro, y aunque es una herramienta excelente, hay que tener cuidado, y entender que este tipo de software tan complejo lleva aparejado siempre cuestiones de diversos tipos. Veamos cinco.

1. Espacio ocupado por los proyectos. Los proyectos se expanden enseguida en tamaño, especialmente si se usan assets complejos o modelos 3D de alta resolución, por no hablar de sonido de alta calidad. No el ejecutable final, pero sí el proyecto. En mi caso, en un juego de complejidad media-alta, en el que conscientemente he tenido cuidado de no abusar de los assets, la carpeta ocupa 3,1 gigas en el disco. Esto es mucho, sin ninguna duda, y gestionarlo es tedioso. Cada copia de seguridad y cada operación conlleva mover literalmente miles de ficheros, porque son miles los que se almacenan. Tendemos a querer tener el mejor juego a todos los niveles, gráfico, de sonido, de opciones… Eso tiene un precio, y es el espacio ocupado.

2. Rendimiento. Unity 3D es una herramienta compleja, que simplemente estando en modo edición tiene varias tareas activas, no hablemos ya cuando se está ejecutando un programa. El ordenador se calienta, la CPU se dispara, y necesitamos tener un PC en condiciones. Es recomendable usar monitores grandes por supuesto, mejor dos que uno, pero sobre todo es recomendable que el PC esté bien ventilado, y tenga al menos 8 gigas de RAM, mejor 16, y que la CPU y la gráfica sean potentes. Esto naturalmente tiene un coste en forma de calor, y ello conlleva que el equipo esté bien diseñado en cuanto a diseño de ventilación. No es que sea una desventaja en sí, pero es el precio a pagar por querer hacer productos potentes y vistosos.

3. Gestión de las versiones. Cuando se pasó de la versión 4 a la 5 de Unity hubo muchos quebraderos de cabeza. Muchos elementos e instrucciones quedaron como obsoletos, y a veces, si un juego es complejo, reconvertirlo es tedioso. Esto es algo que pasa con todas las herramientas, pero en Unity 3D, al tener programas complejos, lo es más. Además si un asset importante de un tercero que usamos ya no tiene mantenimiento, tendremos que readaptarlo nosotros, o cambiarlo por otro que haga una funcionalidad similar. Esto muchas veces es más fácil de decir que de hacer. Otro ejemplo de pesadilla se ha dado con la versión 5.3, que ha dejado obsoletas más instrucciones y la gestión de niveles, entre otras cosas. Mucha gente decide quedarse en versiones anteriores, pero claro, luego dejan de mantenerse y tendremos más problemas. Ahora con la 5.4 he visto que el Unity en versión Mac da muchos errores, aunque en Windows va bien. Yo recomiendo desarrollar con Windows siempre que sea posible. Mac va bien, yo uso Mac muchas veces, pero está claro que la versión Windows de Unity está más pulida.

4. Política de precios y costes. Entramos en un tema subjetivo, pero que crea mucha polémica. Y recientemente más por el cambio de tarifas de Unity. Este producto tiene una versión gratuita que anteriormente era bastante limitada, pero que ahora permite realizar la mayor parte de las posibilidades que otorga el producto, en todo caso suficientes para un desarrollador que se inicia con la herramienta. Pensando en indies como yo, Unity ha sacado un nuevo nivel, que admite una ventana de splash personalizada, cosa que antes no se podía, y aunque sigue saliendo el logo de Unity, al menos permite poner el logo de cada uno. Luego hay una versión profesional y otra para empresas. Las tarifas han cambiado, y ello ha provocado un alud de quejas y aplausos, y Unity ha retocado estos elementos. Para mí esto es una ventaja, pero para mucha gente es una desventaja. Como digo, muy subjetivo.

5. Invasión de juegos. Ya lo comentaba antes. Cuando hacer un juego requería de trabajo intensivo y conocimientos altos de programación, usando Objective C o C++, mucha gente se retraía de hacer juegos. Pero con Unity puedes hacer juegos sencillos en dos tardes, y quedan resultones precisamente gracias a su potencia. Claro que resultones no significa buenos, significa que se ven bien a la vista. Esto conlleva que haya un alud de juegos, y plataformas como Steam Greenlight se ven sacudidas por juegos absurdos que tapan los buenos juegos que entonces nadie ve. Todo el mundo pierde, nadie gana. Esto no es culpa del Unity directamente, pero debemos tenerlo en cuenta. Vamos a tener que demostrar que somos realmente buenos, y eso va más allá del talento y la calidad del juego. Entra en el mundo del marketing y la publicidad, para acercar el producto a la gente. Pero eso, como suele decirse, es otra historia.

En fin, esas son algunas de mis ideas, totalmente personales y subjetivas, con Unity grosso modo. Voy a seguir trabajando con mi beta. Para cualquier duda, aquí estamos. Larga vida y prosperidad.

Anuncios

3 comentarios en “Cinco cosas buenas y cinco no tan buenas de Unity 3D”

  1. Muy interesante tu post, concuerdo contigo unity es muy facil de usar y esto atrae personas llenando los market de juegos demasiado simples(por no decir estupidos), y si unity ocupa bastante espacio enrelidad esto es un gran problema en proyectos grandes, sobre el rendimiento pues unity no exige mucho he llegado a correrlo en computadores con 1gb de RAM aunque claro tododepende del tipo de juego a desarrollar, pero si esto te parece exagerado echale un ojo a los requisitos de Unreal minimo 8gb :/, en fin saludos!!

    1. Sí, es cierto que Unreal es más exigente, supongo que por el hecho de ser un producto más ambicioso y complejo que Unity. Unity tiene de bueno el equilibrio, no es sencillo pero tampoco demasiado complejo, y cualquiera puede hacer sus inventos. Realmente mucho depende del juego que se desarrolle, yo ahora tengo uno en Steam Greenlight que por sus características requiere un equipo de mediana potencia, pero eso es un poco culpa mía por supuesto. No existe la herramienta perfecta, pero para indies creo que es lo que mejor se ajusta al ideal de herramienta para todo. Gracias por tu comentario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s