본문 바로가기
Programming/Godot

Godot 엔진 시작하기 - Godot(Godette) 엔진이란

by Wilkyway 2022. 1. 12.
반응형

Godot엔진에 대해 알아보겠습니다. 이름(...이라기보다는 발음)에 대한 논란이 지속적으로 발생하여 새로운 이름에 대해 커뮤니티를 중심으로 끊이지 않자, 최근 새로운 이름 Godette로 변경하였습니다. 아울러 마스코트도 이상한 톱니머리 얼굴이 아닌 예쁘장한 여학생 캐릭터를 만들었는데요. 머리에 뿔은 이 엔진의 동질성일까요? 계속 동일한 뿔모양을 가져가는 모습입니다. 본 포스팅에서는 기존부터 익숙히 알고 있던 이름인 관계로 Godot라는 명칭을 사용하겠습니다.

 

아르헨티나에 본사를 둔 OKAM이라는 회사에서 인하우스 툴로 사용하던 게임엔진로 이를 MIT 라이센스하에 오픈소스로 배포한 것이라고 합니다. 주요 특징으로는

 

1. 완전 무료

MIT 라이센스 하에 배포되다보니 다른 제한사항도 없고 사용은 물론 수정하여 배포하는 것, 상용으로 사용하는 것까지도 완전 무료인 게임엔진입니다. 그리고 앞으로도 항구적 무료를 유지하기 위해 이를 비영리 자선기관인 Software Freedom Conservancy(소프트웨어 자유 보호단)가 법적으로 대리하고 있다고 합니다. 

 

2. 크로스플랫폼 지원

Godot 엔진은 주요 데스크톱 플랫폼(Linux, macOS, Windows)은 물론 모바일(Android, iOS) 및 웹 기반(HTML5) 플랫폼까지 지원하는 특징을 갖고 있습니다. 

 

3. 작은 용량

Windows용 Standard 64bit버전은 27.4MB, C#을 지원하는 Mono 64bit 버전은 57.9BM에 불과할 정도로 매우 작은 용량입니다. 단, 게임을 배포하려면 템플릿을 추가로 받아야 하는데, 이게 약 200MB정도로 꽤 큽니다. 그럼에도 불구하고 코드편집기, 애니메이션 편집기, 타일맵 편집기, 셰이더 편집기, 디버거 등이 포함되어 있습니다.

 

4. 지원언어

Godot엔진은 GDScript라는 자체 스크립트 언어를 사용하고 있습니다. 기존에는 Lua를 사용했고, Python으로도 구현해보려고 하였으나, 여러가지 사유로 결국 자체 스크립트 언어를 만들게 되었다고 합니다. 그 외에도 C#, C++을 지원하고 있으며, 순수 Python을 사용할 수도 있는데, Addon과 C컴파일러를 별도로 설치해야 하는 등의 불편이 좀 있습니다. 그리고 VisualScript를 지원합니다. Visual Script는 일일이 코딩하는 방식이 아니라 블럭을 연결하는 방식으로, 비프로그래머에게 어필하기 위한 스크립팅 방식입니다. 그리고 Community에 의해 구축된 진짜 Python, Rust, Lua 지원 라이브러리도 있습니다. 

 

5. Godot의 핵심 개념

엔진 내에서 대부분의 게임 요소는 트리 구조의 씬(Scene)으로 만들어집니다. 장면, 게임오브젝트, 캐릭터 등이 하나의 씬, 또는 여러개의 씬을 트리로 만들어 작동합니다. 씬은 노드(Node)가 모여 이루어지며, 노드는 다시 리소스(Resource)가 모여 이루어집니다. 게임에 필요한 기능 대부분은 이 노드를 이용하여 만듭니다. 예를 들어 버튼을 만들기 위한 'Button' 노드가 있고 타일맵을 만들기 위한 'TileSet'노드와 이를 사용하는 'TileMap' 노드가 있다. 씬도 다른 씬의 하위 멤버로 추가하여(인스턴싱) 다른 씬의 노드가 될 수도 있습니다. 이렇게 여러 노드와 씬이 중첩되어서 캐릭터가 되고, 아이템이 되고 노드끼리 시그널을 주고 받으면서 게임을 만드는 것이 Godot의 컨셉입니다.
 

(1) Scene(장면, 씬)

Godot에서의 게임은 재사용 씬을 모아 구성됩니다. 캐릭터, 무기, 사용자 인터페이스의 메뉴, 집 한채, 레벨 전체 등 생각할 수 있는 모든 것이 씬으로 구성될 수 있습니다. 유니티 엔진에서의 프리팹과 씬의 역할을 모두 수행합니다.

씬의 하위에 다른 씬을 배치할 수도 있습니다. 예를 들어 Player씬을 Level씬에 드래그앤 드랍으로 끌어다가 하위에 배치할 수 있습니다.

 

(2) 노드(Node)

씬은 하나 이상의 노드로 구성 됩니다 . 노드는 씬 트리를 구성하는 가장 기본이되는 요소입니다. 아래는 Character 씬의 노드 구성 예입니다. 물론 노드 내부는 수많은 Resource들로 구성되어있지만, 각 노드는 하나의 역할을 하도록 구성되어 있어, Godot에서의 게임 제작은 노드를 기준으로 생각하는 것이 적절합니다.

KinematicBody2D노드를 이용하여 "Character"노드를 만들고, 하위 구성으로는 이미지를 담당하는 Sprite2D노드, 카메라를 담당하는 Camera2D노드, 충돌을 감지하는 CollisionShape2D노드가 모여 구성됩니다. 이 씬(Character)을 다른 씬의 하위로 다시 불러오게 되면 하위 노드들(Camera2D 등)은 나타나지 않고 Character 노드 하나만 나타납니다. 모두 나타나게 하기 위해서는 '편집할 수 있는 자식' 기능을 체크해서 편집을 계속 할 수도 있습니다.

Godot는 다양한 기능을 수행할 수 있는 기능 라이브러리를 제공합니다. 2D, 3D작업 및 사용자 인터페이스 구성에서 대부분의 작업을 이 노드 리스트들을 사용하여 수행합니다.

 

 

(3) 씬 트리

최종 게임은 여러 씬들이 모여 씬 트리 형태로 표시됩니다. 각각의 씬도 결국 노드들의 트리지만, 하위 씬을 추가했을 때에는 기본적으로 씬도 단일 노드로 표시됩니다. 캐릭터, 무기, 문 또는 사용자 인터페이스를 나타낼 수 있는 씬의 관점에서 게임을 생각하는 것이 더 게임 제작 및 관리 입장에서 좀 더 효율적일 수 있습니다. 단, '편집할 수 있는 자식' 기능을 체크할 경우 자식노드도 표시하여 편집을 계속할 수 있습니다.

 

(4) 시그널

노드들 간에 통신을 할 수 있는 시그널의 개념이 있습니다. 예를 들면 CollisionShape 에 적이 충돌하면 죽거나, 키보드 클릭했을 시 움직임 등을 처리할 수 있게 되는거죠.

 

 

 

 

반응형

댓글