Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Godot의 디자인 철학

슬슬 Godot에 익숙해졌으니 Godot이 어떻게 디자인 되었는지 얘기해봅시다.

모든 게임 엔진은 다르며 서로 다른 요구사항에 알맞습니다. 다양한 기능을 제공할뿐만 아니라 각 엔진은 디자인도 독특합니다. 이는 게임의 구조를 형성하는 다양한 방법과 다양한 워크플로로 이어집니다. 게임 엔진의 디자인은 모두 각자의 디자인 철학에서 비롯되었습니다.

이 페이지는 Godot의 작동방식을 이해하도록 돕기 위해, 여러 핵심 기둥으로부터 시작합니다. 이 페이지는 사용가능한 기능의 목록이 아닐 뿐더러, 엔진을 비교하는 문서도 아닙니다. 프로젝트에 적합한 엔진이 있는지 확인하려면 여러분 스스로 시도하고 엔진의 디자인과 한계를 이해해야 합니다.

이 엔진의 전체 특징을 보고싶다면 Godot explained in 5 minutes 이 영상을 시청해주세요.

객체 지향 디자인과 구성

Godot는 유연한 씬 시스템과 노드 계층 구조로 이루어진 객체 지향 디자인을 핵심으로 받아들입니다. 이로인해 엄격한 프로그래밍 패턴을 피하고 직관적인 방법으로 게임을 구성하도록 했습니다.

예를 들어 Godot를 사용하면 씬을 **구성하거나 조합**할 수 있습니다. 중첩된 조립식 건물과 같습니다. BrinkingLight 씬과 BrinkingLight를 사용하는 BrokenLantern 씬을 만들 수 있습니다. 그런 다음 BrokenLanterns로 가득 찬 도시를 만드세요. BrinkingLight의 색상을 변경하고 저장하면 도시의 모든 BrokenLanterns가 즉시 업데이트됩니다.

게다가 어떤 씬에서든지 상속할 수 있습니다.

Godot 씬은 무기, 캐릭터, 아이템, 문, 레벨, 레벨의 일부… 원하는 모든 것이 될 수 있습니다. 에디터를 사용하거나, 코드만 사용하거나, 둘을 혼합하여 일치시켜 자유롭게 디자인할 수 있다는 점을 제외하고는 순수 코드의 클래스처럼 작동합니다.

씬은 상속하고 확장할 수 있기 때문에 여러 3D 엔진에서 찾을 수 있는 프리팹(prefab)과는 다릅니다. 여러분은 여러분의 캐릭터를 확장해서 마술사(Magician)로 만들 수 있습니다. 에디터에서 캐릭터를 수정하면 Magician도 업데이트됩니다. 이는 구조가 게임 디자인과 일치하도록 프로젝트를 빌드하는 데 도움이 됩니다.

image0

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

다시말해, Godot에서의 노드는 다른 일부 게임 엔진에서의 요소와는 조금 다르게 작동합니다.

image1

Sprite2D is a Node2D, a CanvasItem and a Node. It has all the properties and features of its three parent classes, like transforms or the ability to draw custom shapes and render with a custom shader.

올인원 패키지

Godot는 가장 일반적인 요구 사항을 위해 자체 툴을 제공하려고 합니다. 전용 스크립팅 작업 공간, 애니메이션 편집기, 타일맵 편집기, 셰이더 편집기, 디버거, 프로파일러, 로컬 및 원격 장치에서 핫 리로드 등의 기능이 있습니다.

image2

The goal is to offer a full package to create games and a continuous user experience. You can still work with external programs as long as there is an import plugin available in Godot for it. Or you can create one, like the Tiled Map Importer.

That is also partly why Godot offers its own programming language GDScript along with C#. GDScript is designed for the needs of game developers and game designers, and is tightly integrated in the engine and the editor.

GDScript는 들여쓰기 기반의 문장과 자동 완성, 데이터 타입 감지도 제공합니다. 이는 벡터나 색과 같은 빌트인 타입의 코드에도 최적화되어있습니다.

Note that with GDExtension, you can write high-performance code using compiled languages like C, C++, Rust, D, Haxe, or Swift without recompiling the engine.

3D 작업 공간에는 2D 작업 공간만큼 많은 툴이 없습니다. 지형을 편집하고 복잡한 캐릭터에 애니메이션을 적용하는 등의 작업을 수행하려면 외부 프로그램이나 추가 기능이 필요합니다. Godot는 게임 코드를 사용해 에디터의 기능을 확장하는 완전한 API를 제공합니다. 아래의 Godot 에디터는 Godot 게임입니다를 참조하세요.

image4

Godot 엔진 2에서 kubecz3k님이 제작해주신 State Machine editor 플러그인입니다. 이것으로 여러분은 시각적으로 상태와 변화를 다룰 수 있습니다.

오픈 소스

Godot는 MIT 라이선스에 따라 완전한 오픈 소스 코드베이스를 제공합니다. 이는 함께 제공되는 모든 기술도 (권리로서의 의미로) 무료여야 함을 의미합니다. 대부분의 경우 기여자에 의해 처음부터 개발되었습니다.

누구나 프로젝트의 요구에 맞게 독점 툴을 연결할 수 있습니다. 여기에는 Google 애드모빌 또는 FMOD가 포함될 수 있습니다. 이들 중 어떤 것들은 대신 서드 파티 플러그인으로 연결할 수 있습니다.

반면에 오픈 코드베이스는 엔진에서 배우고 확장할 수 있다는 것을 의미합니다. 또한 Godot는 오류가 엔진 자체에서 발생하더라도 스택 추적으로 오류를 출력하므로 게임을 쉽게 디버그할 수 있습니다.

참고

이것은 여러분이 Godot로 하는 작업에 어떤 식으로든 영향을 미치지 않습니다: 엔진은 여러분이 엔진으로 만드는 어떤 것과도 연결되어 있지 않습니다.

커뮤니티 중심

Godot는 커뮤니티에 의해, 커뮤니티를 위해, 모든 게임 제작자를 위해 만들어졌습니다. 핵심 업데이트를 주도하는 것은 사용자의 요구와 공개 토론입니다. 핵심 개발자들에 의해 개발되는 새로운 기능은 대부분의 사용자에게 가장 먼저 혜택을 주는 것에 초점을 맞추는 경우가 많습니다.

비록 소수의 핵심 개발자가 하루종일 작업하지만 지금 글을 적고 있는 시점에서 이 프로젝트에는 600명 이상의 기여자가 있습니다. 자비로운 프로그래머는 자신에게 필요할 수 있는 기능에 대해 작업하므로 모든 메이저 릴리스에서 동시에 엔진의 모든 부분에서 개선된 사항을 볼 수 있습니다.

Godot 에디터는 Godot 게임입니다

Godot 에디터는 게임 엔진에서 실행됩니다. 엔진의 자체 UI 시스템을 사용하므로 프로젝트를 테스트하거나 에디터에서 게임 코드를 실행할 때 코드와 씬을 핫 리로드할 수 있습니다. 즉, 게임에 동일한 코드와 씬을 사용하거나 플러그인을 빌드하고 에디터를 확장할 수 있습니다.

This leads to a reliable and flexible UI system, as it powers the editor itself. With the @tool annotation, you can run any game code in the editor.

image5

RPG in a Box는 Godot 2로 만든 복셀 RPG 편집기입니다. 노드 기반 프로그래밍 시스템과 나머지 인터페이스에 Godot의 UI 툴을 사용합니다.

Put the @tool annotation at the top of any GDScript file and it will run in the editor. This lets you import and export plugins, create plugins like custom level editors, or create scripts with the same nodes and API you use in your projects.

참고

Godot 편집기는 완전히 C++로 작성되었으며 바이너리 실행 파일에 정적(statically)으로 컴파일됩니다. 이는 일반적인 project.godot 파일이 있는 프로젝트처럼 가져올 수 없음을 의미합니다.

2D 와 3D 엔진을 분리

Godot는 전용 2D 및 3D 렌더링 엔진을 제공합니다. 결과적으로 2D 씬의 기본 단위는 픽셀입니다. 엔진이 분리되어 있어도 2D를 3D로, 3D를 2D로 렌더링하고 2D 스프라이트와 인터페이스를 3D 세계에 오버레이할 수 있습니다.