Sistema de archivos

Introducción

El sistema de archivos gestiona cómo se almacenan los recursos y cómo se accede a éstos. Un sistema de archivos bien diseñado también permite a varios desarrolladores editar los mismos archivos y recursos de origen mientras colaboran entre sí. Godot guarda todos los recursos como archivos en su sistema de archivos.

Implementación

El sistema de archivos almacena recursos en el disco. Cualquier cosa, desde un guión hasta una escena o una imagen PNG es un recurso para el motor. Si un recurso contiene propiedades que hacen referencia a otros recursos en el disco, también se incluyen las rutas a esos recursos. Si un recurso tiene subrecursos incorporados, el recurso se graba en un único fichero junto con todos los subrecursos concatenados. Por ejemplo, un recurso de fuente a menudo se agrupa junto con las texturas de fuente.

El sistema de archivos Godot evita el uso de archivos de metadatos. La razón de esto es simple, los administradores de recursos y VCSs (sistemas de control de versiones) existentes son simplemente mucho mejor que cualquier cosa que podamos implementar, así que Godot intenta hacer lo mejor para funcionar bien con SVN, Git, Mercurial, Perforce, etc.

Ejemplo del contenido del sistema de archivos:

/project.godot
/enemy/enemy.tscn
/enemy/enemy.gd
/enemy/enemysprite.png
/player/player.gd

project.godot

El archivo project.godot es el archivo de descripción del proyecto, y siempre se encuentra en la raíz del proyecto. De hecho, su ubicación define dónde está la raíz. Este es el primer archivo que Godot busca al abrir un proyecto.

Este archivo contiene la configuración del proyecto en texto plano, usando el formato win.ini. Incluso un project.godot vacío puede funcionar como una definición básica de un proyecto en blanco.

Delimitador de ruta

Godot sólo admite / como delimitador de ruta. Esto se hace por razones de portabilidad. Todos los sistemas operativos soportan esto, incluso Windows, así que una ruta como c:\project\project.godot necesita ser escrita como c:/project/project.godot.

Ruta del recurso

Cuando se accede a los recursos, utilizar el formato del sistema de archivos del SO host puede resultar complicado y no ser portable. Para resolver este problema, se creó la ruta especial `res://.

La ruta res:// siempre apuntará a la raíz del proyecto (donde se encuentra el project.godot, por lo que de hecho res://project.godot es siempre válido).

Este sistema de archivos es de lectura-escritura sólo cuando se ejecuta el proyecto localmente desde el editor. Cuando se exporta o cuando se ejecuta en diferentes dispositivos (como teléfonos o consolas, o cuando se ejecuta desde un DVD), el sistema de archivos se convertirá en sólo lectura y la escritura ya no estará permitida.

Ruta de usuario

A menudo, la escritura en disco sigue siendo necesaria para varias tareas, como guardar el estado del juego o descargar paquetes de contenido. Con este fin, el motor se asegura de que la ruta especial user:// existe y es siempre escribible.

Sistema de archivos del host

De forma alternativa, también se pueden utilizar las rutas del sistema de archivos del host, pero esto no se recomienda para un producto publicado, ya que no se garantiza que estas rutas funcionen en todas las plataformas. Sin embargo, usar las rutas del sistema de archivos del host puede ser útil cuando se escriben herramientas de desarrollo en Godot.

Inconvenientes

Hay algunos inconvenientes en este sencillo diseño del sistema de archivos. La primera cuestión es que mover los recursos (renombrarlos o moverlos de una ruta a otra dentro del proyecto) romperá las referencias existentes a estos recursos. Estas referencias deberán redefinirse para que apunten a la nueva ubicación del recurso.

Para evitar esto, realiza todas tus operaciones de mover, borrar y renombrar desde Godot, en el panel de Sistema de Archivos. Nunca muevas recursos desde fuera de Godot, o las dependencias tendrán que ser arregladas manualmente (Godot detecta esto y te ayuda a arreglarlas de todos modos, pero ¿por qué ir por el camino difícil?).

La segunda es que bajo Windows y macOS los nombres de archivos y rutas no distinguen entre mayúsculas y minúsculas. Si un desarrollador que trabaja en un sistema de archivos insensible a mayúsculas y minúsculas guarda un recurso como «myfile.PNG», pero luego se refiere a él como «myfile.png», funcionará bien en su plataforma, pero no en otras plataformas, como Linux, Android, etc. Esto también puede aplicarse a los binarios exportados, que utilizan un paquete comprimido para almacenar todos los archivos.

Se recomienda que su equipo defina claramente una convención de nomenclatura para los archivos cuando trabaje con Godot. Una convención simple a prueba de tontos es permitir solamente nombres de archivos y rutas en minúsculas.