01 febrero 2025

Estructura de carpetas de un proyecto de desarrollo de un videojuego

Foto de Niklas Ohlrogge
Un juego utiliza una cantidad masiva de assets. Imágenes, sonidos, ficheros de código, etc, necesitas una manera de organizarlos o, pasado poco tiempo, te costará encontrar las cosas. Por eso, una pregunta típica en los foros es ¿Qué estructura de carpetas le doy a mi proyecto?

Bueno, lo cierto es que esta pregunta no tiene una única respuesta. Muchas veces depende del proyecto, de tus propias particularidades como desarrollador y de los requisitos que a veces imponen los diferentes engines. De todos modos, sí que hay cierto consenso en algunas buenas prácticas que enumeraré en este artículo para que elijas la que más se ajuste a ti.

Los requisitos de los engines

Para empezar, vamos a enumerar las carpetas que siempre tendrás como requisito del engine que estés usando.

En el caso de Unity, este te exige tener 3 carpetas:

  • Assets: Aquí depositarás todos los recursos que crees para el juego.
  • Packages: Aquí se guardan los paquetes que te descargues del package manager.
  • Project Settings: Es donde el editor almacena las configuraciones de tu proyecto.

Las tres carpetas anteriores carpetas anteriores son lo mínimo que deberías guardar en tu repositorio de versiones, en caso de usar uno (lo más recomendable).

Lo normal es que toques dentro de la carpeta Assets, ya que del contenido de las otras carpetas ya se ocupa el editor por ti. La estructura de carpetas que tengas dentro de la de Assets es cosa tuya, pero el editor te exige tener al menos dos:

  • Scripts: Debes contar con esta carpeta para guardar en ella los scripts con los que vaya a funcionar tu juego. Unity compila el juego con los scripts que encuentre en esta carpeta.
  • Editor: Si desarrollas extensiones para el editor o inspectores personalizados, deberás crear esta carpeta y guardar el código de las extensiones allí. No los guardes en la carpeta de Scripts, porque la compilación fallará cuando quieras construir el paquete final, para ejecutar el juego al margen del editor.

En el caso de Godot, los requisitos son más laxos. La única carpeta fija es la de addons, ya que es ahí donde se recogen tanto los plugins que hayas desarrollado tú como los que te hayas bajado del AssetLib.

Partiendo del cumplimiento de los requisitos anteriores, el cielo es el límite a la hora de organizar nuestros assets. Veamos ahora los esquemas habituales que más usa la gente.

Distribución por tipos

Esta es la distribución más clásica. Yo me basé en ella para organizar los recursos de Prince of Unity.

Creas una carpeta para albergar cada tipo de asset: una para imágenes, otra para sonidos, otra para prefabs/escenas, otra para niveles, otra para shaders, etc.

Esta es la estructura que suele recomendar la documentación de Unity y por eso es probable que sea la primera que utilices. 

https://unity.com/es/how-to/organizing-your-project
Ejemplo de organización por tipos, según la documentación de Unity

Distribución funcional

Sin embargo, hay muchos que reniegan de la estructura anterior. Alegan que para distinguir unos assets de otros por el tipo resulta inútil clasificarlos a nivel de carpeta, porque los editores (tanto de Unity como de Godot) te permiten buscar los assets, filtrando por su tipo.

Por eso, la documentación de Godot aboga por situar los assets lo más cerca posible de las escenas que los utilizan. Hay guías de estilo para Unreal Engine que recomiendan lo mismo.

En la práctica, eso supone crear una carpeta por escena y agrupar allí los assets que utiliza, independientemente de su tipo. En Unity, eso significa crear una carpeta por prefab.

Generalmente, la excepción a lo anterior es el código que se suele preferir que vaya en una carpeta aparte donde se concentren todos los ficheros de código fuente (en el caso de Unity ya hemos dicho que contar con la carpeta Scripts es un requisito).

Pero lo normal es que nuestras escenas/prefabs no sean islas autónomas, sino que compartan recursos entre si. ¿Cómo se hace en esos casos? ¿se copia el recurso en la carpeta de cada escena/prefab? No, en esos casos se suele crear una carpeta para los recursos compartidos, puede ser una carpeta  del mismo nivel que la de las escenas/prefab o una carpeta situada en un nivel superior a ellas.

Por ejemplo, la guía de estilo para Unreal Engine que mencionaba antes ofrece esta estructura de ejemplo:

Ejemplo de organización funcional
Ejemplo de organización funcional

Los defensores de esta práctica alegan que es preferible tener una estructura profunda de carpetas, cada una de ellas con unos pocos archivos (aunque sean de distintos tipos), que tener pocos directorios pero abarrotados de archivos. Resulta más fácil saber qué recursos moviliza una escena/prefab si lo ves todo dentro de la misma carpeta.

Conclusión

Organizar tu proyecto es una decisión muy personal. No hay grandes reglas grabadas en piedra. Al final todo se reduce a ordenar tus assets de la manera que te resulte más cómoda y te haga ser más productivo. Quizás, probar alguno de los sistemas de organización de los que te he hablado aquí te ayude a encontrar el tuyo propio.