이번 주차에서는 Godot 엔진과 씬(Scene)·노드(Node)의 기초 개념을 학습합니다. Godot이 다른 게임 엔진과 어떤 차이를 가지는지, 기본 구조가 어떻게 되는지를 이해하는 것이 목표입니다.
게임 개발의 첫걸음을 함께 시작해보겠습니다!
오픈소스 게임 엔진의 핵심 개념과 다른 엔진과의 차별점을 명확히 파악합니다.
Godot의 기본 구조인 씬-노드 시스템을 완전히 이해하고 활용할 수 있게 됩니다.
Label 노드를 이용해 실제로 동작하는 첫 번째 프로그램을 만들어봅니다.
Godot은 오픈소스 게임 엔진으로, 2D와 3D 모두 지원합니다. C++, GDScript, C#을 사용할 수 있으며, 특히 Node 기반 구조로 설계된 것이 가장 큰 특징입니다.

무료이면서 상업적 사용에도 제약이 없습니다. 로열티나 라이선스 비용이 전혀 없어 개인 개발자와 소규모 팀에게 이상적입니다.
가볍고 실행 속도가 빠릅니다. 메모리 사용량이 적어 저사양 컴퓨터에서도 원활하게 동작합니다.
Windows, Linux, Mac, 모바일 모두에서 실행할 수 있습니다. 한 번 개발하면 여러 플랫폼에 배포 가능합니다.
모든 것이 노드(Node)라는 단일 구조로 통일되어 있습니다. 이는 다른 엔진들과 구별되는 가장 큰 특징입니다.
학습 곡선이 완만하여 초보자도 쉽게 접근할 수 있습니다. 복잡한 개념 없이도 빠르게 게임을 만들 수 있습니다.
활발한 커뮤니티와 문서 자료가 풍부합니다. 문제 해결과 학습에 필요한 자료를 쉽게 찾을 수 있습니다.
Godot은 Node 중심으로 설계되어 있어 구조가 단순하며, 이는 객체지향 프로그래밍과 직관적으로 연결됩니다.
씬은 Godot에서 게임을 구성하는 단위 공간입니다. 한 씬은 여러 노드의 집합으로 이루어져 있으며, 게임의 한 화면 혹은 한 단계를 의미합니다.
씬은 게임의 각 상황을 독립적으로 관리할 수 있게 해주는 핵심 개념입니다.

Label과 Button 노드로 구성된 게임 시작 화면입니다. 게임 제목과 시작 버튼이 포함됩니다.
Player, Enemy, Score 노드로 구성된 실제 게임이 진행되는 화면입니다.
Label과 다시 시작 버튼으로 구성된 게임 종료 화면입니다.
(Scene: Main)
└ Node2D
└ Sprite2D (캐릭터)
└ Label (점수)
└ Button (일시정지)
이처럼 씬은 트리 형태로 노드가 배치됩니다. 각 노드는 부모-자식 관계를 형성하며, 계층적으로 관리됩니다.

노드는 Godot에서 가장 작은 단위입니다. 게임에서 표시되는 모든 요소(글자, 이미지, 버튼, 캐릭터)가 노드로 표현됩니다.
마치 레고 블록처럼, 여러 노드를 조합하여 복잡한 게임 객체를 만들 수 있습니다.
2D 공간의 기본 노드로, 위치, 회전, 크기 정보를 가집니다.
이미지를 화면에 표시하는 노드입니다. 캐릭터나 배경 이미지에 사용됩니다.
텍스트를 화면에 표시하는 노드입니다. 점수나 메시지 출력에 활용됩니다.
사용자가 클릭할 수 있는 UI 노드입니다. 게임 시작, 일시정지 등의 기능을 담당합니다.
충돌 판정 영역을 담당하는 노드입니다. 게임 객체 간의 상호작용을 처리합니다.
2D 화면을 제어하는 카메라 노드입니다. 플레이어를 따라가거나 화면을 확대/축소할 수 있습니다.
각 노드는 특정 기능을 수행합니다:
이러한 분업을 통해 복잡한 게임 로직을 단순하고 명확하게 구성할 수 있습니다.
노드는 트리(Tree) 구조로 배치됩니다. 부모-자식 관계를 형성하며, 부모 노드의 움직임은 자식 노드에도 영향을 줍니다.
이는 실제 세계의 관계와 유사합니다. 예를 들어, 자동차가 움직이면 그 안의 모든 부품도 함께 움직이는 것과 같습니다.

캐릭터의 기본 위치와 회전을 담당하는 부모 노드
캐릭터의 시각적 표현을 담당하는 자식 노드
캐릭터의 충돌 판정을 담당하는 자식 노드
중요: Node2D를 이동하면, Sprite2D와 CollisionShape2D도 함께 이동합니다!
노드의 트리 구조를 관리하고 편집할 수 있는 영역입니다.
선택한 노드의 속성을 자세히 보고 수정할 수 있는 영역입니다.
프로젝트의 파일과 폴더를 관리하는 영역입니다.

Inspector 창에서는 선택한 노드의 속성을 수정합니다. 예를 들어 Label 노드의 텍스트 내용을 직접 입력할 수 있습니다.
Godot 에디터에서 "씬" 탭의 "+" 버튼을 클릭하여 새 씬을 생성합니다.
루트 노드로 Node2D를 선택합니다. 이는 2D 게임의 기본 노드입니다.
노드 이름을 "Main"으로 바꾸고 씬을 저장합니다. (Ctrl+S)
Main 노드를 우클릭하고 "자식 노드 추가"를 선택합니다.
노드 목록에서 "Label"을 검색하고 선택합니다.
Inspector에서 Text 속성을 "Hello Godot"으로 변경합니다.
에디터 상단의 ▶ 버튼을 눌러 실행합니다. 처음 실행 시 메인 씬을 설정하라는 창이 나타납니다.
방금 만든 Main.tscn 파일을 선택하면 됩니다.

결과: 화면에 "Hello Godot"이라는 글자가 표시됩니다!
extends Node2D
func _ready():
var label = Label.new()
label.text = "Hello Godot!"
add_child(label)
위 코드는 스크립트로 Label을 생성하는 방법을 보여줍니다. 에디터에서 직접 추가하는 것과 같은 결과를 얻을 수 있습니다.
이 스크립트가 Node2D를 기반으로 함을 의미합니다. 즉, Node2D의 모든 기능을 상속받습니다.
새로운 Label 객체를 생성합니다. 이는 객체지향 프로그래밍의 인스턴스 생성과 같습니다.
Label의 텍스트 속성을 지정합니다. Inspector에서 Text 필드를 수정하는 것과 동일한 효과입니다.
현재 씬의 루트 노드에 Label을 자식으로 추가합니다. 이로써 Label이 화면에 표시됩니다.
실행하면 화면에 "Hello Godot!"이라는 텍스트가 표시됩니다. 위치는 기본적으로 (0,0) 좌표 기준입니다.
이것이 바로 여러분의 첫 번째 Godot 프로그램입니다! 🎉
새로운 프로젝트를 생성하고 이름을 "MyFirstGame"으로 설정합니다.
씬(Scene)을 Node2D로 추가하고 이름을 "Main"으로 변경합니다.
자식 노드로 Label을 추가하고 텍스트를 본인 이름으로 변경한 후 실행해봅니다.
Label을 여러 개 복사하여 화면에 다른 위치에 배치합니다. 각 Label마다 다른 설정을 적용해보세요:
Sprite2D 노드를 추가하고, 임의의 이미지를 불러옵니다. Label과 Sprite를 함께 배치하여 더 풍부한 화면을 만들어보세요.

Node는 프로그래밍의 객체(Object)와 같은 개념입니다. 즉, 속성과 기능을 가지며 인스턴스로 활용됩니다.
이는 현실 세계의 사물을 프로그램으로 모델링하는 객체지향 프로그래밍의 핵심 개념과 일치합니다.
자동차 설계도 = Node 클래스
실제 도로 위 자동차 = Node 인스턴스
공장에서 자동차 제작 = new() 함수
Godot에서 Node도 같은 원리로 동작합니다!
모든 노드의 최상위 부모 클래스
2D 위치, 회전, 크기 기능 추가
이미지 표시 기능까지 포함
자식 클래스는 부모의 모든 기능을 물려받습니다.

GameObject + Component 시스템을 사용합니다. GameObject에 다양한 Component를 붙여서 기능을 구현합니다.

Node 기반 시스템으로 더 단순합니다. 각 Node가 이미 특정 기능을 내장하고 있어 초보자에게 직관적입니다.
Godot의 계층 구조는 더 유연하고 직관적으로 설계되어 있습니다.
A: 여러 노드(Node)의 집합으로 구성된다.
씬은 게임의 한 화면이나 상황을 나타내며, 다양한 기능을 가진 노드들이 모여서 하나의 완성된 씬을 만듭니다.
A: 화면에 텍스트를 출력한다.
Label 노드는 게임 내에서 점수, 메시지, 제목 등 다양한 텍스트 정보를 플레이어에게 보여주는 역할을 담당합니다.
A: 자식 노드도 함께 이동한다.
이는 트리 구조의 핵심 특징으로, 부모의 변화(이동, 회전, 크기 변경)는 모든 자식 노드에게 상대적으로 적용됩니다.
Godot 엔진은 Node 중심 구조로 설계되어 있어 다른 엔진들보다 단순하고 직관적입니다.
씬(Scene)은 Node의 집합이며, Node는 트리 구조로 관리됩니다.
Label, Sprite2D, Button 등 다양한 노드가 존재하며, 각각 고유한 기능을 담당합니다.
첫 번째 실습을 통해 Label을 화면에 출력하는 기본기를 익혔습니다.
Node2D를 루트로 하는 새 씬을 생성합니다.
Label 노드를 사용하여 본인의 이름과 학번을 화면에 출력합니다.
Inspector에서 색상과 크기를 조정한 후 실행화면을 캡처하여 제출합니다.
https://github.com/PacktPublishing/Godot-4-Game-Development-Projects-Second-Edition/tree/main/Downloads
이번 시간에는 Godot의 철학과 씬/노드 개념을 배웠습니다. 여러분은 이제 Godot의 기본 구조를 이해하고 첫 번째 프로그램을 만들 수 있게 되었습니다!
수고하셨습니다! 🎮✨
1주차 확장판 - 씬과 노드의 기초