파일 시스템(File system)

소개

파일 시스템은 애셋이 저장되는 방법과 애셋에 접근하는 방법을 관리합니다. 잘 설계된 파일 시스템에서는 여러 개발자가 협업하면서 동일한 소스 파일과 애셋을 편집할 수 있습니다. Godot는 모든 애셋을 파일 시스템에 파일 형태로 저장합니다.

구현

파일 시스템은 리소스를 디스크에 저장합니다. 스크립트에서 씬이나 PNG 이미지에 이르기까지 모든 것이 엔진의 리소스입니다. 리소스에 디스크의 다른 리소스를 참조하는 속성이 포함된 경우 해당 리소스에 대한 경로도 포함됩니다. 리소스에 내장된 하위 리소스가 있는 경우 해당 리소스는 모든 하위 리소스들과 함께 단일 파일에 저장됩니다. 예를 들어, 폰트 리소스는 자주 폰트 텍스처와 함께 묶여집니다.

Godot 파일 시스템은 메타데이터 파일을 사용하지 않습니다. 기존 애셋 관리자와 버전 관리 시스템(VCS)은 저희가 구현할 수 있는 것보다 우수하므로 Godot는 SVN, Git, Mercurial, Perforce 등과 함께 작업할 수 있도록 최선을 다합니다.

파일 시스템 내용의 예:

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

project.godot

project.godot 파일은 프로젝트 설명 파일이며 항상 프로젝트의 루트에 있습니다. 사실, 파일의 위치가 루트를 정의합니다. 이 파일은 Godot가 프로젝트를 열 때 가장 먼저 찾는 파일입니다.

이 파일에는 win.ini 형식을 사용하는 텍스트로 된 프로젝트 설정이 포함되어 있습니다. 빈 project.godot도 빈 프로젝트의 기본 설정으로 기능할 수 있습니다.

경로 구분 기호

Godot는 경로 구분자로 /만 지원합니다. 이식성을 높이기 위함입니다. Windows를 포함한 모든 운영 체제가 이를 지원하므로 C:\project\project.godot같은 경로는 C:/project/project.godot로 입력해야 합니다.

리소스 경로(Resource path)

리소스에 접근할 때 호스트 OS 파일 시스템 레이아웃을 사용하는 것은 번거롭고 이식성이 떨어질 수 있습니다. 이 문제를 해결하기 위해 특수 경로 res://가 만들어졌습니다.

res:// 경로는 항상 프로젝트 루트를 가리킵니다(그곳에는 project.godot가 있고, 그래서 res://project.godot 경로가 항상 존재합니다).

이 파일 시스템은 에디터에서 로컬로 프로젝트를 실행할 때만 읽고 쓸 수 있습니다. 내보내거나 다른 장치(예: 전화, 콘솔, DVD에서)에서 실행하면 파일 시스템이 읽기 전용이 되고 쓰기가 더 이상 허용되지 않습니다.

사용자 경로(User path)

게임 상태를 저장하거나 콘텐츠 팩을 다운로드하는 것과 같은 작업에는 여전히 디스크에 쓰는 작업이 필요합니다. 이를 위해 엔진은 항상 쓰기 가능한 특수 경로 ``user://``가 있는지 확인합니다. 이 경로는 프로젝트가 실행 중인 OS에 따라 다르게 해석됩니다. 로컬 경로 확인은 File paths in Godot projects에 자세히 설명되어 있습니다.

호스트 파일 시스템(Host file system)

호스트 파일 시스템 경로도 사용할 수 있지만 릴리스된 제품에는 이러한 경로가 모든 플랫폼에서 작동하지 않을 수 있으므로 권장하지 않습니다. 그러나 호스트 파일 시스템 경로를 사용하면 Godot에서 개발 툴을 만들 때 유용할 수 있습니다.

단점

이 단순한 파일 시스템 설계에는 몇 가지 단점이 있습니다. 첫 번째 문제는 애셋을 이동(이름 변경 또는 프로젝트 내의 한 경로에서 다른 경로로 이동)하면 이러한 애셋에 대한 기존 참조가 손상된다는 점입니다. 이러한 참조는 새 애셋 위치를 가리키도록 재정의되어야 합니다.

이 문제를 회피하려면, Godot의 파일시스템(FileSystem) 독 안에서 모든 이동, 삭제 및 이름 바꾸기 작업을 수행하세요. 절대로 Godot 외부에서 애셋을 이동시키지 마세요. 그렇지 않으면 종속성을 수동으로 수정해야 합니다(Godot은 이를 감지하고 어쨌든 고칠 수 있도록 도와주지만, 굳이 어려운 길로 갈 필요가 있나요?).

두 번째는 Windows 및 macOS에서 파일과 경로 이름이 대소문자를 구분하지 않는다는 점입니다. 대소문자를 구분하지 않는 호스트 파일 시스템에서 작업하는 개발자가 애셋을 myfile.PNG로 저장한 다음 myfile.png로 참조하는 경우 해당 플랫폼에서는 제대로 작동하지만 다른 플랫폼에서는 작동하지 않습니다. Linux, Android 등과 같이 압축된 패키지를 사용해 모든 파일을 저장하는 내보낸 바이너리에도 이 문제가 적용될 수 있습니다.

Godot로 작업할 때 파일에 대한 명명 규칙을 명확하게 정의하는 것이 좋습니다. 한 가지 간단한 실수 방지 규칙은 소문자 파일 및 경로 이름만 허용하는 것입니다.