Las ventajas reales al programar herramientas propias para desarrollar videojuegos
El desarrollo de videojuegos va más allá de la creatividad y la habilidad técnica; requiere herramientas que permitan a los desarrolladores materializar sus ideas de manera eficiente. Cuando trabajas en un proyecto grande o con mecánicas complejas, te das cuenta de que las herramientas estándar a menudo se quedan cortas. Aquí es donde entra en juego la personalización: la capacidad de crear tus propias herramientas para mejorar el flujo de trabajo y optimizar la producción.
Este artículo está dirigido a programadores mid-junior o junior que buscan elevar su nivel en la industria. Exploraremos cómo la creación de herramientas personalizadas no solo resuelve problemas específicos, sino que también amplía tu comprensión del «detrás de escena» del desarrollo.
Escucha el audio generado de este artículo para mayor accesibilidad (Inglés)
¿Por Qué Crear Herramientas Personalizadas?
La adopción de herramientas estándar, aunque provechosa hasta cierto punto, puede resultar limitante. Estas herramientas, diseñadas para abordar necesidades generales, a menudo carecen de la flexibilidad necesaria para innovar o personalizar en profundidad. Desarrollar tus propias herramientas te da el poder de superar estas limitaciones, ofreciendo beneficios clave como:
- Ahorro de tiempo: Automatizar tareas repetitivas y reducir errores humanos.
- Mayor control: Ajustar cada aspecto del desarrollo a las necesidades del proyecto.
- Mejor colaboración: Facilitar la comunicación entre programadores, artistas y diseñadores.
- Crecimiento profesional: Mejorar tus habilidades y abrir puertas en la industria.
Si alguna vez has perdido horas haciendo algo manualmente cuando sabes que podría automatizarse, ¡es hora de pensar en construir tu propia herramienta!.
La Esencia de las Herramientas Personalizadas
Las herramientas personalizadas ofrecen soluciones específicas a problemas únicos dentro del desarrollo de un juego. Ya sea ajustando la física de un mundo virtual, perfeccionando el comportamiento de la IA o simplemente agilizando el flujo de trabajo, las herramientas personalizadas pueden ser diseñadas con un propósito claro y ajustadas a medida que evolucionan las necesidades del proyecto.
Adoptar una filosofía de «hazlo tú mismo» no solo resuelve problemas concretos, sino que también te da una comprensión más profunda de los mecanismos internos del juego. Con el tiempo, esta capacidad de adaptación y optimización se convierte en un «superpoder» dentro del mundo del desarrollo.
Creación de Herramientas en Unity 3D y Unreal Engine
Si trabajas con Unity 3D o Unreal Engine, tienes en tus manos motores de juego increíblemente versátiles que permiten la creación de herramientas personalizadas para optimizar el desarrollo.
- Unity 3D: Editor Tools y Custom Inspectors.
- Custom Inspectors: Para personalizar la visualización y edición de componentes en el Inspector.
- Scriptable Wizards: Interfaces interactivas para automatizar tareas como la creación de niveles.
- Editor Windows: Herramientas avanzadas con interfaces propias dentro del editor.
Por ejemplo, si estás trabajando en un juego de niveles generados proceduralmente, puedes desarrollar una herramienta visual que te permita modificar parámetros sin necesidad de tocar código cada vez. Más rapidez, menos frustración. 💡
- Unreal Engine: Blueprints y Herramientas C++.
- Blueprints Editor Utility Widgets (EUW): Interfaces gráficas dentro del editor para automatizar tareas.
- Herramientas en C++: Modificaciones avanzadas del editor y creación de paneles personalizados.
Si necesitas crear un sistema de generación procedural de terrenos, podrías desarrollar un editor de topografía con sliders y opciones personalizadas que permitan modificar el paisaje en tiempo real.
Ambos motores de juego ofrecen una flexibilidad tremenda para la creación de herramientas que simplifican procesos y mejoran la eficiencia del equipo. ¡Y aprender a hacerlas te convierte en un desarrollador mucho más valioso!. 🚀
Ejemplos de Herramientas Útiles
Para que te hagas una idea de cómo una herramienta personalizada puede hacer la diferencia, aquí tienes algunos ejemplos:
- Optimizador de recursos gráficos: Un script que revisa automáticamente qué texturas están sin usar o tienen una resolución excesiva.
- Depurador de IA: Una herramienta visual que permite ver el árbol de decisiones de los NPCs en tiempo real.
- Generador de escenarios: Un editor de niveles procedural con controles intuitivos para modificar estructuras sin tocar código.
- Herramientas Interactivas en Tiempo Real: Dear ImGui
Otra herramienta poderosa en la creación de interfaces personalizadas es Dear ImGui, una biblioteca en C++ que permite crear interfaces gráficas ligeras y eficientes dentro del mismo juego o editor. Es perfecta para herramientas de depuración, ajustes en tiempo real y visualización de datos, sin afectar el rendimiento del juego.
El Rol del Programador de Herramientas (Tools Programmer) y el Technical Designer
Es crucial distinguir los roles del programador de herramientas y el technical designer:
- Programador de Herramientas: Se enfoca en la arquitectura y funcionalidad de las herramientas. Su objetivo es crear un framework robusto y eficiente que permita a otros equipos trabajar de manera más efectiva. Dan Somali, programador de herramientas en Guerrilla Games, menciona que el equipo de herramientas debe empoderar a otros, ya sean usuarios finales u otros programadores. El equipo de herramientas debe concentrarse en construir el framework y los controles de la interfaz de usuario, mientras que los expertos en el dominio pueden concentrarse en modelar el comportamiento del workflow.
- Technical Designer: El technical designer puede ser el punto de enlace entre el equipo de diseño y el equipo de programación. Pueden encargarse de prototipos o herramientas que luego el equipo de programación de herramientas formalizará. El technical designer tiene un conocimiento más profundo del motor y los sistemas del juego, lo que le permite crear herramientas que se integran de manera más fluida con el pipeline. Según Dan Somali, un technical designer creó un prototipo de editor de scripting visual, y si el prototipo funcionaba, el equipo de herramientas lo convertiría en una herramienta real.
Herramientas como Medio de Comunicación y Documentación
El desarrollo de herramientas personalizadas trasciende la simple funcionalidad técnica; se convierten en vehículos de comunicación dentro del equipo de desarrollo. La capacidad de visualizar y manipular directamente los elementos del juego permite a todos los miembros del equipo, independientemente de su trasfondo técnico, comprender mejor el proyecto y contribuir de manera más efectiva. Omar Akbani destaca que las herramientas son comunicación y que exponer datos en vivo al equipo es una forma sólida de comunicación.
Estas herramientas actúan como documentación viva, proporcionando un recurso actualizado e interactivo sobre la lógica y el estado del juego. En lugar de depender de documentación estática que puede quedar rápidamente obsoleta, las herramientas personalizadas ofrecen una vista dinámica y en profundidad del proyecto.
Consejos para Empezar a Crear tus Propias Herramientas
- Identifica tareas repetitivas: Si haces lo mismo una y otra vez, es un buen candidato para automatizarlo.
- Empieza simple: No intentes crear una mega herramienta desde el principio. Mejor comienza con scripts pequeños y expándelos.
- Explora la API de tu motor de juego: Tanto Unity como Unreal tienen documentación detallada sobre la extensión del editor.
- Recibe feedback: Si la herramienta es para un equipo, asegúrate de que sea fácil de usar y ajusta lo que sea necesario.
- Itera y mejora: Una herramienta rara vez es perfecta en su primera versión. Prueba, ajusta y vuelve a probar.
Ejemplos molones que podemos encontrar en la industria
- Horizon Zero Dawn: Guerrilla Games reconstruyó su pipeline de herramientas durante el desarrollo de Horizon Zero Dawn. El equipo de herramientas de Guerrilla era relativamente pequeño, con solo cuatro a seis programadores de herramientas de tiempo completo para un equipo de aproximadamente 220 personas. Para ser eficientes, se enfocaron en construir editores específicos para cada disciplina, llamados «contextos de edición», utilizando componentes reutilizables dentro de una aplicación integrada llamada «Decimator». El objetivo era construir herramientas que se ajustaran a las necesidades de los creadores de contenido.
- El motor Decima ya contaba con una base de código madura y contenía muchas bibliotecas que serían útiles para el desarrollo de herramientas. Una de las características más importantes fue el sistema RTTI (Runtime Type Introspection), necesario para manipular datos en un editor.
- Para la edición de niveles, crearon un visor 3D del juego, un explorador de assets, un esquema jerárquico y un editor de atributos. También desarrollaron un editor de scripting visual y un editor de conversaciones.
- Como ejemplo de una herramienta creada por otro equipo gracias al framework de herramientas, se encuentra un depurador con todas las características capaz de mostrar información de depuración en tiempo real desde instancias activas de un gráfico.
- Darkest Dungeon: El equipo de Darkest Dungeon automatizó la implementación de datos utilizando identificadores (IDs) y la jerarquía del sistema de archivos. Esto les permitió vincular código, datos y archivos de manera eficiente.
- Usaron IDs para mensajes de validación cuando faltaba información o había un error. También los usaron para generar rutas de archivos y organizar archivos en diferentes carpetas.
- Además, los IDs facilitaron compartir lógica entre múltiples elementos y generar tipos de clases al analizar diferentes tipos de clases.
- Obsidian Entertainment: Obsidian ha iterado en sus herramientas (OEI tools) durante años para crear diálogos ramificados para sus juegos.
- El editor de conversaciones de Obsidian permite estructurar diálogos, escribir y revisar texto, y scripting el flujo de una conversación. Permite a los diseñadores y escritores integrar el scripting directamente en el árbol de diálogo.
- El depurador de conversaciones de Obsidian se comunica con Unity o Unreal para proporcionar información útil sobre la conversación actual, como el nodo actual, el estado de los nodos y los valores de las variables globales.
- Para garantizar el equilibrio, Obsidian utiliza una herramienta de seguimiento de scripts que analiza cada conversación en el juego y recopila cada llamada de script de cada nodo.
- Remedy Entertainment: Remedy Entertainment reconstruyó su framework de herramientas internas, pasando de una aplicación monolítica MFC a un sistema basado en plugins WPF.
- Vesa Parkane explicó cómo pasaron de una arquitectura acoplada a una basada en plugins, pero encontraron problemas con la comunicación entre los paneles.
- Para solucionar esto, adoptaron un diseño workflow-driven, donde la aplicación modela los workflows y es responsable de configurar los paneles y exponer los comandos específicos del workflow.
- Introdujeron los conceptos de «documento» y «contexto» para separar la interfaz de usuario de los detalles de los datos. El documento es la capa de la interfaz de usuario que describe cómo se editan las cosas, mientras que el contexto maneja todos los detalles de los datos.
Aprende a crear herramientas con nosotros
Si este tema te ha picado la curiosidad y quieres llevar tus habilidades al siguiente nivel, en nuestros bootcamps avanzados de programación de videojuegos con Unity y Unreal Engine así como nuestro Máster en Technical art y VFX avanzado profundizamos en la creación de herramientas personalizadas. Te enseñamos cómo diseñar editores, automatizar procesos y optimizar el flujo de trabajo con ejemplos prácticos y reales.
Ya seas un programador que quiere agilizar su trabajo o un diseñador técnico que busca crear herramientas para su equipo, este conocimiento te hará destacar en la industria. Una herramienta bien diseñada puede ahorrar horas de trabajo, reducir errores y mejorar la calidad del producto final. Desarrollar estas habilidades te hace más versátil y valioso dentro del sector.
Crear herramientas personalizadas es mucho más que optimizar procesos: es abrir un mundo de posibilidades para innovar, experimentar y crecer como desarrollador. Una herramienta bien diseñada puede ahorrar horas de trabajo, reducir errores y mejorar la calidad del producto final. Pero lo más importante es que desarrollar estas habilidades te hace más versátil y valioso dentro del sector.
Si quieres que tu desarrollo fluya sin obstáculos y llevar tus habilidades al siguiente nivel, ¡es hora de empezar a construir tus propias herramientas!
![Level Up [Game Dev Hub]](https://www.levelup-gamedevhub.com/wp-content/uploads/2022/06/Logo_LevelUp_HUB_Positivo-2.png)

