Godot의 디자인 철학

이제 당신은 손에 땀이 날 지경이니, Godot의 디자인 철학에 대해 얘기해 보겠습니다.

모든 게임 엔진은 서로 다르고 그렇기에 다른 필요를 충족시킵니다. 그들이 제공하는 기능의 범위 뿐만 아니라, 각 엔진의 디자인도 독특합니다. 이것은 게임의 구조를 형성하는 다양한 방법과 다양한 워크플로우를 유도합니다. 이 모든 것이 각각의 디자인 철학에서 생겨난 것입니다.

이 페이지가 Godot의 작동방식을 이해하도록 돕기 위해, 여러 핵심 기둥들로 시작합니다. 이것은 사용가능한 기능의 목록이 아닐 뿐더러, 엔진을 비교하는 것도 아닙니다. 어떤 엔진이라도 당신의 프로젝트에 잘 맞들어지는지 알기 위해선, 당신이 스스로 시도하고 그것의 디자인과 한계를 이해해야합니다.

엔진의 기능에 관한 개요를 보고 싶다면 Discover Godot 3, the Free game engine 를 봐주세요.

객체 지향 디자인과 구성

Godot는 유연한 씬 시스템과 노드 계층 구조를 갖춘 객체 지향 디자인을 핵심으로 갖고 있습니다. 이것으로 엄격한 프로그래밍 패턴을 피하고 직관적인 방법으로 게임을 구성하도록 만들었습니다.

이를 위해 Godot는 당신이 씬을 조립하거나 집합하도록 만들었습니다. 이건 마치 중첩 물체같습니다: 당신이 깜박이는 빛 씬을 만들고 이 씬이 사용된 고장난 전봇대 씬을 만들었습니다. 그리고, 고장난 전봇대가 들어간 도시를 만듭니다. 깜박이는 빛의 색을 바꾸고, 저장해서, 도시의 모든 고장난 전봇대가 즉각적으로 업데이트될 것입니다.

무엇보다도, 당신이 어떤 씬에서든지 상속하는 것 이 가능합니다.

Godot 씬은 무기나 캐릭터, 아이템, 문, 하나의 레벨, 레벨의 일부... 원하는 어떤 것이든 될수 있습니다. 에디터를 사용하거나, 오직 코드만을 사용하거나 이 둘을 섞어서 일치시켜서 자유롭게 디자인한다는 경우를 제외하면 마치 순수코드에서의 클래스처럼 작동합니다.

이것은 씬을 상속하고 확장한다는 점에서 여러 3D 엔진에서 볼수 있는 프리펩과는 다릅니다. 당신은 캐릭터를 확장시켜 마법사를 만들수도 있습니다. 에디터에 있는 캐릭터를 수정하면 마법사도 이를 업데이트합니다. 이것은 당신이 프로젝트를 만들면서 프로젝트 구조가 게임 디자인에 일치하도록 도와줍니다.

image0

또한 Godot는 노드라고 불리는 다양한 유형의 객체를 제공합니다, 이들 각각 특정한 목적을 지니고 있습니다. 노드는 트리의 일부분으로 항상 그들의 부모 노드에서 노드 클래스까지 상속합니다. 비록 엔진이 충돌 모양같은 구성 요소를 포함하지만, 이들은 예외이고, 표준이 아닙니다.

image1

Node2D의 Sprite, CanvasItem과 Node. 이 세 개의 부모 클래스는 모든 속성과 기능을 가지고 있습니다, 예를들면 변환이나 사용자 지정 모양을 그리고 쉐이더로 렌더하는 것이 있습니다.

모든 것이 들어있는 패키지

Godot는 가장 보편적인 요구들의 해답을 제공하고자 노력했습니다. Godot는 전용 스크립팅 작업 공간과 애니메이션 에디터, 타일맵 에디터, 쉐이더 에디터, 디버거, 프로파일러, 로컬 및 원격 장치를 핫 리로드 하는 기능 등등을 가지고 있습니다.

image2

목표는 게임을 만드는 모든 패키지와 끊김없는 사용자 경험을 제공하는 것입니다. 물론 가져오기 플러그인이 있다면 여전히 외부 프로그램과 함께 작업할 수 있습니다. 아니면 Tiled Map Importer 처럼 하나로 만들 수도 있습니다.

이것이 Godot가 C#과 함께, 고유의 프로그래밍 언어인 GDScript와 VisualScript를 제공하는 이유이기도 합니다. 그들은 게임 개발자와 게임 디자이너의 필요를 위해 제작되었고, 엔진과 에디터에 완벽하게 통합됩니다.

GDScript는 Python과 유사한 문법을 사용하여 쉬운 코드를 사용하지만, 타입을 인지하고 정적 언어의 자동 완성 품질을 제공합니다. 또한 Vectors와 Colors 같은 내장 함수를 가지고 있어 게임플레이 코드에 최적화되어 있습니다.

GDNative를 사용하면, 엔진을 리컴파일하지 않고 C, C++, Rust, 아니면 (Cython 컴파일러를 사용한) Python과 같이 컴파일된 언어를 사용해 고성능의 코드를 작성할 수 있습니다.

image3

VisualScript는 노드 기반 프로그래밍 언어로 에디터에 잘 통합되어 있습니다. 노드나 리소스를 그래프로 드래그 앤 드롭하여 새 노드 블럭을 생성할 수 있습니다.

3D 작업 공간은 2D 작업 공간같은 도구들이 많지 않습니다. 당신은 외부 프로그램이나 애드온으로 지형을 편집하거나, 복잡한 캐릭터를 애니메이트하거나 해야합니다. Godot는 게임 코드를 사용하여 에디터의 기능성을 넓히는 완전한 API를 제공합니다. 하단의 The Godot editor is a Godot game 을 참고하세요.

image4

Godot 엔진 2에서 kubecz3k님이 만드신 State Machine editor 플러그인입니다. 이걸로 당신은 시각적으로 상태와 변화를 다룰 수 있습니다.

오픈 소스

Godot는 MIT 라이선스 하에 완전한 오픈 소스 코드베이스를 제공합니다. 이는 여기서 제공하는 모든 기술들은 (자유로서의) 무료임을 의미합니다. 대부분의 기술들은, 참여자들에 의해 기초부터 개발되었습니다.

누구든지 프로젝트에 필요한 도구들을 연결할 수 있습니다 — 다만 그것들이 엔진과 함께 제공되지 않습니다. 이것들은 아마 NViDia PhysX나 구글 애드몹, 혹은 FBX 파일 importer일 것입니다. 이들은 대신 제 3자 플러그인으로서 넣을 수 있습니다.

한편, 오픈 코드베이스는 당신이 엔진에서 배우고 확장하여 당신의 마음대로 콘텐츠를 만들 수 있다는 것을 의미합니다. 또한 Godot는 에러가 엔진 자체에서 발생하는 것일지라도, 스택 추적을 포함한 에러를 출력하므로, 게임을 쉽게 디버깅 할 수 있습니다.

주석

이것은 어떤 방식으로라도 Godot를 사용하는 작업에 영향을 주지 않습니다 : 엔진에는 어떤 문자열도 붙어있지 않고 문자열로 만들 것도 없습니다.

커뮤니티 중심

Godot는 커뮤니티에 의해, 커뮤니티를 위해, 그리고 모든 게임 개발자들을 위해 만들어졌습니다. 이것은 핵심 업데이트를 이끌어 내는 열린 토론과 사용자들의 요구가 반영된 것입니다. 새로은 기능은 핵심 개발자로부터 나오며 대부분의 사용자들에게 도움을 주는 것을 최우선으로 봅니다.

이는 즉, 비록 소수의 핵심 개발자들이 하루 종일 일할지라도, 프로젝트는 그 시간에 600명이 넘는 참여자가 활동합니다. 자애로운 프로그래머들이 스스로에게 필요한 기능들을 작업하기 때문에, 모든 주요 릴리즈 마다 엔진의 모든 방면에서 개선되는 것을 볼 수 있을 겁니다.

Godot 에디터는 Godot 게임입니다

Godot 에디터는 게임 엔진으로 돌아갑니다. 이것은 엔진 스스로의 UI 시스템을 사용하고, 프로젝트를 테스트하거나 에디터에서 게임 코드를 실행할 때 코드와 씬을 핫 리로드 할 수 있습니다. 이는 당신이 게임에 쓰는 코드와 같은 코드와 씬을 사용해서 , 플러그인을 만들거나 에디터를 확장 시킬 수 있다는 것을 의미합니다.

이것은 에디터 자체에 권한을 부여하기 때문에 안정적이고 유연한 UI 시스템을 만듭니다. tool 키워드로 당신은 에디터에서 어떤 게임 코드도 실행시킬 수 있습니다.

image5

RPG in a Box는 복셀 RPG 에디터로 Godot 2 에서 만들어졌습니다. 노드 기반 프로그래밍 시스템과 인터페이스의 일부를 위해 Godot UI 툴을 사용했습니다.

tool 키워드를 GDscript 파일의 맨 위에 놓으면 에디터에서 파일이 실행될 것입니다. 이걸로 당신은 프로젝트에 쓰이는 것과 똑같은 노드와 API를 가지고 플러그인을 내보내거나 가져올 수 있고, 사용자 지정 레벨 에디터 같은 플러그인을 제작하거나, 스크립트를 만들 수 있습니다.

2D 와 3D 엔진을 분리함

Godot는 전용 2D 와 3D 렌더링 엔진을 제공합니다. 그 결과 2D 씬의 기본 단위는 픽셀입니다. 비록 엔진이 분리되더라도, 당신은 3D에서 2D를, 2D에서 3D를 렌더할 수 있고, 3D 월드에 2D 스프라이트와 인터페이스를 씌울 수 있습니다.