Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Godot의 디자인 철학
슬슬 Godot에 익숙해졌으니 Godot가 어떻게 디자인 되었는지 얘기해봅시다.
모든 게임 엔진은 다르며 서로 다른 요구사항에 알맞습니다. 다양한 기능을 제공할뿐만 아니라 각 엔진은 디자인도 독특합니다. 이는 게임의 구조를 형성하는 다양한 방법과 다양한 워크플로로 이어집니다. 게임 엔진의 디자인은 모두 각자의 디자인 철학에서 비롯되었습니다.
이 페이지는 Godot의 작동방식을 이해하도록 돕기 위해, 여러 핵심 기둥으로부터 시작합니다. 이 페이지는 사용가능한 기능의 목록이 아닐 뿐더러, 엔진을 비교하는 문서도 아닙니다. 프로젝트에 적합한 엔진이 있는지 확인하려면 여러분 스스로 시도하고 엔진의 디자인과 한계를 이해해야 합니다.
엔진의 기능을 개괄적으로 살펴보고 싶다면 Godot explained in 7 minutes 영상을 시청해 보세요.
객체 지향 디자인과 구성
Godot는 유연한 씬 시스템과 노드 계층 구조로 이루어진 객체 지향 디자인을 핵심으로 받아들입니다. 이로인해 엄격한 프로그래밍 패턴을 피하고 직관적인 방법으로 게임을 구성하도록 했습니다.
예를 들어 Godot를 사용하면 씬을 구성하거나 조합할 수 있습니다. 중첩된 조립식 건물과 같습니다. BrinkingLight 씬과 BrinkingLight를 사용하는 BrokenLantern 씬을 만들 수 있습니다. 그런 다음 BrokenLanterns로 가득 찬 도시를 만드세요. BrinkingLight의 색상을 변경하고 저장하면 도시의 모든 BrokenLanterns가 즉시 업데이트됩니다.
게다가 어떤 씬에서든지 상속할 수 있습니다.
Godot 씬은 무기, 캐릭터, 아이템, 문, 레벨, 레벨의 일부… 원하는 모든 것이 될 수 있습니다. 편집기를 사용하거나, 코드만 사용하거나, 둘을 혼합하여 일치시켜 자유롭게 디자인할 수 있다는 점을 제외하고는 순수 코드의 클래스처럼 작동합니다.
씬은 상속하고 확장할 수 있기 때문에 여러 3D 엔진에서 찾을 수 있는 프리팹과는 다릅니다. 여러분은 여러분의 캐릭터를 확장해서 마술사(Magician)로 만들 수 있습니다. 편집기에서 캐릭터를 수정하면 Magician도 업데이트됩니다. 이는 구조가 게임 디자인과 일치하도록 프로젝트를 빌드하는 데 도움이 됩니다.

또한 Godot는 노드라고 불리는 다양한 형태의 오브젝트를 제공한다는 것을 기억하세요. 각각 특정한 목적으로 쓰이는 노드는 트리의 파트이며, 언제나 노드 클래스라고 하는 부모에게 상속되어 있습니다. 그러므로 (충돌을 구현할 때 쓰이는) 콜리전 모양과 같은 특정 노드라도 다른 노드와는 분리되어 작동합니다.
다시말해, Godot에서의 노드는 다른 일부 게임 엔진에서의 요소와는 조금 다르게 작동합니다.

Sprite2D는 Node2D이자 CanvasItem이며 Node입니다. 따라서 세 부모 클래스의 모든 속성과 기능을 물려받으며, 변환이나 사용자 정의 도형 그리기, 사용자 정의 셰이더로 렌더링하는 기능 등이 여기에 포함됩니다.
올인원 패키지
Godot는 가장 일반적인 요구 사항을 위해 자체 툴을 제공하려고 합니다. 전용 스크립팅 작업 공간, 애니메이션 편집기, 타일맵 편집기, 셰이더 편집기, 디버거, 프로파일러, 로컬 및 원격 장치에서 핫 리로드 등의 기능이 있습니다.

목표는 게임 제작에 필요한 전체 패키지와 일관된 사용자 경험을 제공하는 것입니다. 그래도 Godot에 해당 프로그램용 가져오기 플러그인이 있다면 외부 프로그램과 함께 작업할 수 있습니다.
이것이 Godot가 C#과 함께 자체 프로그래밍 언어인 GDScript를 제공하는 이유 중 하나이기도 합니다. GDScript는 게임 개발자와 게임 디자이너의 요구에 맞춰 설계되었으며, 엔진과 편집기에 긴밀하게 통합되어 있습니다.
GDScript는 들여쓰기 기반의 문장과 자동완성, 데이터 유형 감지도 제공합니다. 이는 벡터나 색상과 같은 내장 유형의 코드에도 최적화되어있습니다.
GDExtension을 사용하면 엔진을 다시 컴파일하지 않고도 C, C++, Rust, D, Haxe, Swift 같은 컴파일 언어로 고성능 코드를 작성할 수 있다는 점도 알아 두세요.
3D 작업 공간에는 2D 작업 공간만큼 많은 툴이 없습니다. 지형을 편집하고 복잡한 캐릭터에 애니메이션을 적용하는 등의 작업을 수행하려면 외부 프로그램이나 추가 기능이 필요합니다. Godot는 게임 코드를 사용해 편집기의 기능을 확장하는 완전한 API를 제공합니다. 아래의 Godot 편집기는 Godot 게임입니다를 참조하세요.
오픈 소스
Godot는 MIT 라이선스에 따라 완전히 오픈 소스인 코드베이스를 제공합니다. 즉, 라이선스 파일을 그대로 유지하는 한 누구나 그 코드베이스를 자유롭게 다운로드하고, 사용하고, 수정하고, 공유할 수 있습니다.
서드 파티 라이브러리를 포함해 Godot와 함께 제공되는 모든 기술은 이 오픈 소스 라이선스와 법적으로 호환되어야 합니다. 따라서 Godot의 대부분은 커뮤니티 기여자들이 바닥부터 직접 개발합니다.
누구나 프로젝트의 요구에 맞게 독점 툴을 연결할 수 있습니다. 여기에는 Google 애드모빌 또는 FMOD가 포함될 수 있습니다. 이들 중 어떤 것들은 대신 서드 파티 플러그인으로 연결할 수 있습니다.
반면에 오픈 코드베이스는 엔진에서 배우고 확장할 수 있다는 것을 의미합니다. 또한 Godot는 오류가 엔진 자체에서 발생하더라도 스택 추적으로 오류를 출력하므로 게임을 쉽게 디버그할 수 있습니다.
참고
이것은 여러분이 Godot로 하는 작업에 어떤 식으로든 영향을 미치지 않습니다: 엔진은 여러분이 엔진으로 만드는 어떤 것과도 연결되어 있지 않습니다.
커뮤니티 주도
Godot는 커뮤니티에 의해, 커뮤니티를 위해, 모든 게임 제작자를 위해 만들어졌습니다. 핵심 업데이트를 주도하는 것은 사용자의 요구와 공개 토론입니다. 핵심 개발자들에 의해 개발되는 새로운 기능은 대부분의 사용자에게 가장 먼저 혜택을 주는 것에 초점을 맞추는 경우가 많습니다.
그렇다고 해도, 소수의 핵심 개발자가 풀타임으로 작업하고 있기는 하지만 이 글을 쓰는 시점에 프로젝트에는 수천 명의 기여자가 있습니다. 선의의 프로그래머들은 자신에게도 필요한 기능을 개발하기 때문에, 모든 메이저 릴리스마다 엔진 곳곳에서 동시에 개선 사항을 볼 수 있습니다.
Godot 편집기는 Godot 게임입니다
Godot 편집기는 게임 엔진에서 실행됩니다. 엔진의 자체 UI 시스템을 사용하므로 프로젝트를 테스트하거나 편집기에서 게임 코드를 실행할 때 코드와 씬을 핫 리로드할 수 있습니다. 즉, 여러분의 게임에 동일한 코드와 씬을 사용하거나 플러그인을 빌드하고 편집기를 확장할 수 있습니다.
이 시스템이 편집기 자체를 구동하기 때문에 신뢰할 수 있고 유연한 UI 시스템으로 이어집니다. @tool 어노테이션을 사용하면 편집기 안에서 어떤 게임 코드든 실행할 수 있습니다.
RPG in a Box는 Godot로 만든 복셀 RPG 편집기입니다. 노드 기반 프로그래밍 시스템과 나머지 인터페이스에 Godot의 UI 도구를 사용합니다.
어떤 GDScript 파일이든 맨 위에 @tool 어노테이션을 붙이면 편집기에서 실행됩니다. 이를 통해 가져오기/내보내기 플러그인을 만들고, 사용자 지정 레벨 편집기 같은 플러그인을 만들거나, 프로젝트에서 사용하는 것과 같은 노드와 API를 사용하는 스크립트를 만들 수 있습니다.
참고
Godot 편집기는 완전히 C++로 작성되었으며 바이너리 실행 파일에 정적(statically)으로 컴파일됩니다. 이는 일반적인 project.godot 파일이 있는 프로젝트처럼 가져올 수 없음을 의미합니다.
2D 와 3D 엔진을 분리
Godot는 전용 2D 및 3D 렌더링 엔진을 제공합니다. 결과적으로 2D 씬의 기본 단위는 픽셀입니다. 엔진이 분리되어 있어도 2D를 3D로, 3D를 2D로 렌더링하고 2D 스프라이트와 인터페이스를 3D 세계에 오버레이할 수 있습니다.