Godot 4 Node 강의안
1주차 확장판 - 씬과 노드의 기초
수업 소개
이번 주차에서는 Godot 엔진과 씬(Scene)·노드(Node)의 기초 개념을 학습합니다. Godot이 다른 게임 엔진과 어떤 차이를 가지는지, 기본 구조가 어떻게 되는지를 이해하는 것이 목표입니다.
게임 개발의 첫걸음을 함께 시작해보겠습니다!
학습 목표
1
Godot 엔진의 철학과 특징 이해
오픈소스 게임 엔진의 핵심 개념과 다른 엔진과의 차별점을 명확히 파악합니다.
2
씬과 노드의 개념 습득
Godot의 기본 구조인 씬-노드 시스템을 완전히 이해하고 활용할 수 있게 됩니다.
3
첫 번째 화면 구성
Label 노드를 이용해 실제로 동작하는 첫 번째 프로그램을 만들어봅니다.
Godot 엔진 개요
Godot은 오픈소스 게임 엔진으로, 2D와 3D 모두 지원합니다. C++, GDScript, C#을 사용할 수 있으며, 특히 Node 기반 구조로 설계된 것이 가장 큰 특징입니다.
  • 완전 무료 오픈소스
  • 2D/3D 통합 개발 환경
  • 다양한 프로그래밍 언어 지원
  • 직관적인 노드 시스템
Godot의 주요 장점
완전 무료
무료이면서 상업적 사용에도 제약이 없습니다. 로열티나 라이선스 비용이 전혀 없어 개인 개발자와 소규모 팀에게 이상적입니다.
가볍고 빠름
가볍고 실행 속도가 빠릅니다. 메모리 사용량이 적어 저사양 컴퓨터에서도 원활하게 동작합니다.
크로스 플랫폼
Windows, Linux, Mac, 모바일 모두에서 실행할 수 있습니다. 한 번 개발하면 여러 플랫폼에 배포 가능합니다.
Godot의 핵심 특징
노드 기반 구조
모든 것이 노드(Node)라는 단일 구조로 통일되어 있습니다. 이는 다른 엔진들과 구별되는 가장 큰 특징입니다.
쉬운 학습 곡선
학습 곡선이 완만하여 초보자도 쉽게 접근할 수 있습니다. 복잡한 개념 없이도 빠르게 게임을 만들 수 있습니다.
풍부한 커뮤니티
활발한 커뮤니티와 문서 자료가 풍부합니다. 문제 해결과 학습에 필요한 자료를 쉽게 찾을 수 있습니다.
다른 엔진과의 비교
Godot은 Node 중심으로 설계되어 있어 구조가 단순하며, 이는 객체지향 프로그래밍과 직관적으로 연결됩니다.
씬(Scene)의 정의
씬이란?
씬은 Godot에서 게임을 구성하는 단위 공간입니다. 한 씬은 여러 노드의 집합으로 이루어져 있으며, 게임의 한 화면 혹은 한 단계를 의미합니다.
씬은 게임의 각 상황을 독립적으로 관리할 수 있게 해주는 핵심 개념입니다.
씬의 실제 예시
타이틀 화면
Label과 Button 노드로 구성된 게임 시작 화면입니다. 게임 제목과 시작 버튼이 포함됩니다.
게임 플레이
Player, Enemy, Score 노드로 구성된 실제 게임이 진행되는 화면입니다.
게임 오버
Label과 다시 시작 버튼으로 구성된 게임 종료 화면입니다.
씬 구조 다이어그램
(Scene: Main) └ Node2D  └ Sprite2D (캐릭터)  └ Label (점수)  └ Button (일시정지)
이처럼 씬은 트리 형태로 노드가 배치됩니다. 각 노드는 부모-자식 관계를 형성하며, 계층적으로 관리됩니다.
노드(Node)의 정의
노드란?
노드는 Godot에서 가장 작은 단위입니다. 게임에서 표시되는 모든 요소(글자, 이미지, 버튼, 캐릭터)가 노드로 표현됩니다.
마치 레고 블록처럼, 여러 노드를 조합하여 복잡한 게임 객체를 만들 수 있습니다.
2D 노드의 종류
Node2D
2D 공간의 기본 노드로, 위치, 회전, 크기 정보를 가집니다.
Sprite2D
이미지를 화면에 표시하는 노드입니다. 캐릭터나 배경 이미지에 사용됩니다.
Label
텍스트를 화면에 표시하는 노드입니다. 점수나 메시지 출력에 활용됩니다.
UI 및 기능 노드
1
Button
사용자가 클릭할 수 있는 UI 노드입니다. 게임 시작, 일시정지 등의 기능을 담당합니다.
2
CollisionShape2D
충돌 판정 영역을 담당하는 노드입니다. 게임 객체 간의 상호작용을 처리합니다.
3
Camera2D
2D 화면을 제어하는 카메라 노드입니다. 플레이어를 따라가거나 화면을 확대/축소할 수 있습니다.
노드의 역할과 기능
각 노드는 특정 기능을 수행합니다:
  • Sprite2D는 이미지를 표시
  • Label은 글자를 출력
  • Button은 이벤트 처리를 담당
  • CollisionShape2D는 충돌 감지
이러한 분업을 통해 복잡한 게임 로직을 단순하고 명확하게 구성할 수 있습니다.
노드의 계층 구조 개념
트리 구조의 특징
노드는 트리(Tree) 구조로 배치됩니다. 부모-자식 관계를 형성하며, 부모 노드의 움직임은 자식 노드에도 영향을 줍니다.
이는 실제 세계의 관계와 유사합니다. 예를 들어, 자동차가 움직이면 그 안의 모든 부품도 함께 움직이는 것과 같습니다.
계층 구조의 실제 예시
1
Node2D (캐릭터 본체)
캐릭터의 기본 위치와 회전을 담당하는 부모 노드
2
Sprite2D (이미지)
캐릭터의 시각적 표현을 담당하는 자식 노드
3
CollisionShape2D (충돌 영역)
캐릭터의 충돌 판정을 담당하는 자식 노드
중요: Node2D를 이동하면, Sprite2D와 CollisionShape2D도 함께 이동합니다!
Godot 에디터 화면 구성
씬 창 (Scene)
노드의 트리 구조를 관리하고 편집할 수 있는 영역입니다.
Inspector 창
선택한 노드의 속성을 자세히 보고 수정할 수 있는 영역입니다.
FileSystem 창
프로젝트의 파일과 폴더를 관리하는 영역입니다.
Inspector 창 활용법
속성 편집의 핵심
Inspector 창에서는 선택한 노드의 속성을 수정합니다. 예를 들어 Label 노드의 텍스트 내용을 직접 입력할 수 있습니다.
  • 텍스트 내용 변경
  • 폰트 크기 조절
  • 색상 변경
  • 위치 및 크기 조정
첫 번째 씬 만들기
01
새 씬 생성
Godot 에디터에서 "씬" 탭의 "+" 버튼을 클릭하여 새 씬을 생성합니다.
02
Node2D 추가
루트 노드로 Node2D를 선택합니다. 이는 2D 게임의 기본 노드입니다.
03
이름 변경 및 저장
노드 이름을 "Main"으로 바꾸고 씬을 저장합니다. (Ctrl+S)
Label 노드 추가하기
노드 추가
Main 노드를 우클릭하고 "자식 노드 추가"를 선택합니다.
Label 선택
노드 목록에서 "Label"을 검색하고 선택합니다.
텍스트 설정
Inspector에서 Text 속성을 "Hello Godot"으로 변경합니다.
첫 번째 프로그램 실행
실행 방법
에디터 상단의 버튼을 눌러 실행합니다. 처음 실행 시 메인 씬을 설정하라는 창이 나타납니다.
방금 만든 Main.tscn 파일을 선택하면 됩니다.
결과: 화면에 "Hello Godot"이라는 글자가 표시됩니다!
GDScript 코드 예시
extends Node2D func _ready(): var label = Label.new() label.text = "Hello Godot!" add_child(label)
위 코드는 스크립트로 Label을 생성하는 방법을 보여줍니다. 에디터에서 직접 추가하는 것과 같은 결과를 얻을 수 있습니다.
코드 구조 분석 (1)
extends Node2D
이 스크립트가 Node2D를 기반으로 함을 의미합니다. 즉, Node2D의 모든 기능을 상속받습니다.
Label.new()
새로운 Label 객체를 생성합니다. 이는 객체지향 프로그래밍의 인스턴스 생성과 같습니다.
코드 구조 분석 (2)
label.text
Label의 텍스트 속성을 지정합니다. Inspector에서 Text 필드를 수정하는 것과 동일한 효과입니다.
add_child(label)
현재 씬의 루트 노드에 Label을 자식으로 추가합니다. 이로써 Label이 화면에 표시됩니다.
실행 결과 확인
실행하면 화면에 "Hello Godot!"이라는 텍스트가 표시됩니다. 위치는 기본적으로 (0,0) 좌표 기준입니다.
이것이 바로 여러분의 첫 번째 Godot 프로그램입니다! 🎉
기본 실습 활동
1
프로젝트 생성
새로운 프로젝트를 생성하고 이름을 "MyFirstGame"으로 설정합니다.
2
씬 구성
씬(Scene)을 Node2D로 추가하고 이름을 "Main"으로 변경합니다.
3
개인화
자식 노드로 Label을 추가하고 텍스트를 본인 이름으로 변경한 후 실행해봅니다.
확장 실습 (1) - 다중 Label
Label을 여러 개 복사하여 화면에 다른 위치에 배치합니다. 각 Label마다 다른 설정을 적용해보세요:
  • 폰트 크기 변경 (Inspector → Theme Overrides → Font Sizes)
  • 색상 변경 (Inspector → Theme Overrides → Colors)
  • 위치 조정 (Transform → Position)
확장 실습 (2) - 이미지 추가
Sprite2D 노드 활용
Sprite2D 노드를 추가하고, 임의의 이미지를 불러옵니다. Label과 Sprite를 함께 배치하여 더 풍부한 화면을 만들어보세요.
  • 이미지 파일 준비 (.png, .jpg)
  • Sprite2D 노드 추가
  • Texture 속성에 이미지 할당
객체지향과 Node의 관계 (1)
Node는 프로그래밍의 객체(Object)와 같은 개념입니다. 즉, 속성과 기능을 가지며 인스턴스로 활용됩니다.
이는 현실 세계의 사물을 프로그램으로 모델링하는 객체지향 프로그래밍의 핵심 개념과 일치합니다.
객체지향과 Node의 관계 (2)
클래스
자동차 설계도 = Node 클래스
인스턴스
실제 도로 위 자동차 = Node 인스턴스
생성
공장에서 자동차 제작 = new() 함수
Godot에서 Node도 같은 원리로 동작합니다!
상속 구조의 이해
Node
모든 노드의 최상위 부모 클래스
Node2D
2D 위치, 회전, 크기 기능 추가
Sprite2D
이미지 표시 기능까지 포함
자식 클래스는 부모의 모든 기능을 물려받습니다.
Unity와의 구조 비교
Unity 방식
GameObject + Component 시스템을 사용합니다. GameObject에 다양한 Component를 붙여서 기능을 구현합니다.
Godot 방식
Node 기반 시스템으로 더 단순합니다. 각 Node가 이미 특정 기능을 내장하고 있어 초보자에게 직관적입니다.
Unreal Engine과의 비교
Godot의 계층 구조는 더 유연하고 직관적으로 설계되어 있습니다.
학습 점검 퀴즈 (1)
Q: 씬(Scene)은 무엇으로 구성되는가?
A: 여러 노드(Node)의 집합으로 구성된다.
씬은 게임의 한 화면이나 상황을 나타내며, 다양한 기능을 가진 노드들이 모여서 하나의 완성된 씬을 만듭니다.
학습 점검 퀴즈 (2)
Q: Label 노드의 주요 역할은 무엇인가?
A: 화면에 텍스트를 출력한다.
Label 노드는 게임 내에서 점수, 메시지, 제목 등 다양한 텍스트 정보를 플레이어에게 보여주는 역할을 담당합니다.
학습 점검 퀴즈 (3)
Q: 부모 노드를 이동하면 자식 노드는 어떻게 되는가?
A: 자식 노드도 함께 이동한다.
이는 트리 구조의 핵심 특징으로, 부모의 변화(이동, 회전, 크기 변경)는 모든 자식 노드에게 상대적으로 적용됩니다.
핵심 내용 요약 (1)
Godot의 특징
Godot 엔진은 Node 중심 구조로 설계되어 있어 다른 엔진들보다 단순하고 직관적입니다.
씬과 노드
씬(Scene)은 Node의 집합이며, Node는 트리 구조로 관리됩니다.
핵심 내용 요약 (2)
다양한 노드 타입
Label, Sprite2D, Button 등 다양한 노드가 존재하며, 각각 고유한 기능을 담당합니다.
실습 성과
첫 번째 실습을 통해 Label을 화면에 출력하는 기본기를 익혔습니다.
과제 안내
"자기 이름 태그 씬" 만들기
01
기본 씬 생성
Node2D를 루트로 하는 새 씬을 생성합니다.
02
정보 출력
Label 노드를 사용하여 본인의 이름과 학번을 화면에 출력합니다.
03
디자인 적용
Inspector에서 색상과 크기를 조정한 후 실행화면을 캡처하여 제출합니다.
파일 다운로드
https://github.com/PacktPublishing/Godot-4-Game-Development-Projects-Second-Edition/tree/main/Downloads
마무리 및 다음 주 예고
이번 시간에는 Godot의 철학과 씬/노드 개념을 배웠습니다. 여러분은 이제 Godot의 기본 구조를 이해하고 첫 번째 프로그램을 만들 수 있게 되었습니다!

다음 주 학습 내용: 노드의 속성과 변환(위치, 회전, 크기)을 심화 학습하고, 더 복잡한 씬 구성 방법을 익혀보겠습니다.
수고하셨습니다! 🎮