파일 시스템(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:// 라는 특수 경로를 보장합니다.

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

또는 호스트 파일 시스템 경로도 사용될 수 있습니다, 하지만 이것이 모든 플랫폼에서 작동된다는 보장은 없으니 출시된 제품에 이 경로를 쓰는 것을 추천하지는 않습니다. 하지만, 호스트 파일 시스템 경로는 Godot에서 개발 도구를 만들 때 유용할 수 있습니다.

단점

이 간단한 파일 시스템 설계에는 몇 가지 단점이 있습니다. 첫 번째 문제는 애셋의 이동으로 (프로젝트 내에서 이름을 바꾸거나 한 경로를 다른 곳으로 옮기는 등) 이 애셋에 관해 존재하는 참조를 깨버릴 것입니다. 이 참조는 새 애셋 위치를 향하도록 다시 정의해야만 합니다.

이를 피하기 위해, Godot에서, 파일 시스템 독 내에서, 위치를 바꾸거나 이름을 바꾸거나 삭제하는 등의 모든 작업을 해야만 합니다. Godot 밖에서 애셋을 움직이지 마세요, 그렇지 않으면 종속 여부를 수동으로 설정해야만 합니다 (Godot는 이를 감지하고 당신이 고치는 것을 어쨌든 도울 것이지만, 왜 어려운 길로 가시나요?).

두 번째로 Windows와 macOS에서는 파일과 경로 이름을 대소문자를 구별하지 않는 것입니다. 대소문자를 구분하지 않는 호스트 파일 시스템이 애셋을 "myfile.PNG"라고 저장하지만, "myfile.png" 로 참조됩니다, 그 플랫폼 내에서는 작동이 잘 될 것입니다, 하지만 Linux, Android 등의 플랫폼에서는 작동하지 않습니다. 이는 압축된 패키지로 모든 파일을 저장하는 내보낸 바이너리에도 적용될 수 있습니다.

Godot로 작업할 때 팀이 명명 규칙을 분명하게 정의하는 것을 추천합니다. 간단한 바보 같은 규칙으로는 파일과 경로 이름을 소문자로만 허락하는 것이 있습니다.