En este primer artículo dos de nuestros desarrolladores tratarán una de las eternas discusiones que surgen en el mundo del desarrollo de software: Crear un código propio para tareas sencillas o usar plugins externos de otros desarrolladores.

Xavier Giralt, jefe de desarrollo en U-Play Studios: Usar plugins de la tienda de Unity


Me encanta programar videojuegos. Siempre ha sido mi sueño, mi pasión y ahora que puedo dedicarme a ello, quiero pasar tanto tiempo como sea posible haciéndolo. Me defino como programador de gameplay y me encanta la programación del juego en sí mismo. Tal vez es por ello, por lo que no me gusta escribir mis propios plugins para llevar a cabo tareas sencillas.

Ahorro de tiempo


Por ejemplo, la gestión de las InApps. Poco tiene que ver con la gameplay de nuestros juegos y es una tarea que siempre trato de evitar. En nuestros juegos desarrollados en Unity tenemos el típico conjunto de InApps disponibles, no hacemos nada complicado, nada fuera de lo común... ¿por qué debería de perder tiempo en implementar InApps de la manera que Android e iOS quieren, si puedo encontrar plugins buenos y de fiar en la tienda de Unity que ya lo hacen por mí?

No niego que es necesario entender (hasta cierto punto) la tecnología que los plugins te permiten utilizar. Obviamente, se necesita cierto conocimiento de lo que se está haciendo, pero realmente no necesitas estar al día de si Google cambia el nombre de algunos de sus servicios de la Google API o de si la versión actual de InApps es 3.0 o 2.0.

Ahorro de dinero


Mirémoslo desde un punto de vista económico. Contratamos a un programador de videojuegos que gana 2.000$ al mes. Queremos que integre el sistema de compras InApp desde cero en nuestro juego. Trabaja 40 horas a la semana, por lo que su salario por hora es de 12,5$. Hay algunos plugins en la tienda de Unity que cuestan 50$ por plataforma y que integran las inApps de una manera muy sencilla. Dicho esto, ¿será capaz nuestro programador de programar un sistema completamente nuevo desde cero en 8 horas? Obviamente, ni de lejos, lograría hacerlo.

Cada vez que hablo de esto con alguien que le gusta tener el control total de todo, y no utiliza ningún tipo de plugin, la discusión siempre llega al mismo punto. El punto en el que siempre acaba saliendo la frase "pero si escribo yo mismo el código, crearé un sistema más adaptado a nuestras necesidades". Mi respuesta siempre es la misma: "estoy totalmente de acuerdo contigo". Y es cierto, estoy seguro de que un sistema propio se adaptará mejor y hará exactamente lo que uno quiere y nada más, pero ¿a qué precio? ¿Merece realmente la pena?

Depender de programadores altamente cualificados


Además, no estamos teniendo en cuenta que normalmente los plugins han sido desarrollados por personas expertas que saben mucho más que nosotros en ese campo específico. Por ejemplo, NGUI. Yo siempre uso NGUI en mis proyectos de Unity porque no me gusta cómo funciona el sistema de interfaz gráfico de usuario nativo de Unity. Si has trabajado con él, seguramente sabrás que el creador de la NGUI es un experto en la materia (fue contratado para trabajar en Unity para reemplazar todo el sistema GUI por uno completamente nuevo). Sería muy ingenuo pensar que podemos crear un sistema mejor que el suyo, cuando digo mejor, me refiero a las llamadas, a tener una memoria eficiente, fácil de usar, multiplataforma, etc.

Ahorrar tiempo de testeo


Además hay que añadir el "factor de prueba" en la ecuación. Estos plugins utilizados en masa se prueban diariamente por muchísimas personas y están prácticamente exentos de errores. Nuestro sistema pequeño, pero preciado, tendrá que ser probado a fondo y puede fallar en cualquier momento.

Inconvenientes


Por otro lado, siempre habrá algunos inconvenientes en el uso de un plugin. Algunas partes pueden resultar difíciles de integrar en tu código. Otros tal vez te ofrezcan más funcionalidades de las que necesitas o menos, pero en general, me gusta utilizar uno si me puede ahorrar tiempo y trabajo, incluso si tengo que adaptarme a esas limitaciones o especificaciones que los plugins externos puedan tener.




Quim Garrigós, jefe de desarrollo en U-Play Online (+QuimGarrigos): Crear plugins desde cero


He estado trabajando como desarrollador durante más de 16 años y me he enfrentado a este problema muchas veces. Cuando me decidí a utilizar una biblioteca externa para alguna tarea, la mayoría de las veces acabó siendo una mala decisión. Después de tantos dolores de cabeza ahora, por lo general, tiendo a desarrollar mis propios plugins, incluso antes de intentar probar otras bibliotecas ya creadas para el mismo propósito.

Por supuesto que no me gusta hacer tareas tediosas como la implementación del sistema de pagos dentro de la aplicación para todas las tiendas donde publicamos el juego, pero he aprendido que puedo terminarlo antes si lo hago yo mismo. Ya en 2011, cuando publicamos por primera vez un juego para móviles, y Google acababa de publicar el IAP para el Android Market, decidimos utilizar un plugin externo nada barato. Además estaba mal documentado, y después de haber pasado un montón de tiempo aprendiendo cómo funcionaba y cómo integrarlo, descubrimos que petaba en una parte recóndita del código. El creador del plugin nunca respondió a nuestras preguntas, nos rendimos y dejamos de usar ese plugin. Al final todo fue una pérdida de tiempo y dinero.

Rendimiento


Por lo general, los plugins, especialmente los grandes, disponen de muchas características y flexibilidad para ser adecuados a todos los casos de uso diferentes. Esto significa dos cosas: una versión final que ocupará más y un riesgo para el rendimiento de la app debido a que contiene algunas características que nunca usarás.

Características y código cerrado


No importa cómo de grande es tu plugin siempre verás que justo no tiene esa funcionalidad que necesitas para tu proyecto. Puedes estar a punto de finalizar el desarrollo, pero te ves obligado a volver atrás y dejar de usar el plugin, pues te es imposible llevar a cabo una tarea simple con él. En algunos casos, si dispones del código fuente, con suerte puedes sumergirte en cientos de líneas de código y cambiarlo. Si no dispones del código fuente, puedes pedir a los desarrolladores que te ayuden, pero sin duda esto retrasará tu proyecto.

Aprendizaje e integración


Los plugins pueden llegar a ser tan complejos, que el tiempo de integración de los mismos puede superar incluso el tiempo de implementación de la característica por ti mismo. La mayoría de las veces la documentación amateur disponible no ayuda, o ni existe comunidad alguna para responder a las dudas surgidas sobre este plugin.

Fácilmente el coste de tiempo de desarrollo puede ser mayor al usar un plugin que al implementarlo. Ese es el caso de los plugins de InApp. ¿Por qué aprender a integrar un plugin si crearlo desde cero lleva exactamente el mismo tiempo?

Dependencia


Imagina que tienes un proyecto muy grande hecho con NGUI y por alguna razón tienes que cambiar a otro sistema. En ese caso, el coste del cambio puede ser muy alto, tanto como comenzar el proyecto desde cero. Si por el contrario, utilizaste métodos estándar, puede que tengas la suerte de no tener que cambiar ni una sola línea.

Mi conclusión


El uso de motores de desarrollo de juegos en sí es un ejemplo muy claro de lo que comentaba. Puedes desarrollar un juego con Unity, lo harás rápido y tendrás ayuda para una gran cantidad de plataformas y un montón de características. Pero tu juego tendrá unos Mb extra en tamaño y un rendimiento más pobre que otros lenguajes nativos. Y se puede dar el caso de que la plataforma donde necesita publicar el juego no es compatible con Unity y tendrás que empezar el desarrollo de nuevo.

¿Cuántas veces has tenido que dejar de utilizar una característica en tu juego porque es imposible implementarla con Unity? En la mayoría de los casos Unity hará el trabajo bien, pero asegúrate antes de empezar que tendrá todo lo que necesitas.

Reflexiones finales


Por supuesto, estamos antes dos ejemplos extremos. Podrás contar con Unity en la mayoría de tus proyectos, y sería una locura o habría que tener razones de peso para utilizar directamente C++ en su lugar.

Hay muchos desarrolladores expertos por ahí dispuestos a ayudarte. Tu mejor opción será siempre intentar lo que ya está hecho, pero nunca se debe descartar hacerlo por uno mismo, siempre hay alguna manera de mejorar lo que está hecho.

¿Cuáles son sus experiencias usando plugins? ¿Cuáles son para ti los plugins de Unity imprescindibles?

Usar plugins de la tienda de Unity Vs Crear plugins desde cero

Hablemos sobre desarrollo de software: crear código propio para tareas sencillas o usar plugins externos

Av. Meridiana 350 7C
08027 Barcelona (Spain) - 00 34 93 309 02 69