LEVELIT 고도 엔진으로 시작하는 첫 게임 개발: GDScript 기초부터 2D, 3D 게임 완성까지 한 권으로 배우는 입문 가이드 - LEVELIT 시리즈

LEVELIT 고도 엔진으로 시작하는 첫 게임 개발: GDScript 기초부터 2D, 3D 게임 완성까지 한 권으로 배우는 입문 가이드 - LEVELIT 시리즈

$32.00
저자

코드쉼터

저자:코드쉼터
창작의즐거움에빠져'코드쉼터'라는공간에서게임개발과프로그래밍에관한지식공유활동을이어가고있다.고도,언리얼,유니티엔진등다양한게임엔진과C++,Zig,러스트와같은프로그래밍언어개발,시스템동작원리에관심이많으며,그래픽스,게임엔진개발,게임플레이스크립팅을깊이있게연구해왔다.현재는유튜브를통해게임개발노하우와개발과정을공유하고,사람들에게편안한휴식을제공하는콘텐츠를기획하고있다.

목차

오프닝x
튜토리얼xii
학습가이드xviii
로드맵xx

PARTI게임개발의기초LEVEL1게임개발의첫걸음시작하기3
1.1고도엔진이해하기4
__1.1.1게임엔진이란?4
__1.1.2게임엔진의역할5
__1.1.3엔진없는게임제작방식6
__1.1.4고도엔진의특징7
__1.1.5오픈소스프로젝트란?8
1.2유니티,언리얼엔진과비교하기10
__1.2.1라이선스및비용10
__1.2.2커뮤니티와생태계10
__1.2.3개발난이도12
__1.2.4자유도12
__1.2.5그래픽품질13
__1.2.6플랫폼지원13
1.3개발흐름머릿속에그리기14
리플레이16/QUIZ16

LEVEL2고도엔진설치하고바로시작하기17
2.1고도엔진홈페이지살펴보기18
__2.1.1홈페이지구조18
__2.1.2상단메뉴구성19
2.2고도엔진설치하기22
__2.2.1버전선택기준23
__2.2.2다운로드및압축해제24
2.3프로젝트생성하기26
__2.3.1고도엔진실행26
__2.3.2언어설정변경27
__2.3.3프로젝트생성28
리플레이30/QUIZ30

LEVEL3고도엔진인터페이스익히기31
3.1에디터UI한눈에파악하기32
3.2프로젝트매니저이해하기34
__3.2.1새프로젝트생성35
__3.2.2기존프로젝트가져오기36
__3.2.3스캔기능활용37
__3.2.4프로젝트필터및정렬,애셋라이브러리38
__3.2.5프로젝트옵션버튼기능40
3.3노드와씬이해하기42
__3.3.1노드란?42
__3.3.2부모-자식관계42
__3.3.3씬이란?43
__3.3.4노드및씬구조를사용하는이유43
3.4메뉴익히기45
__3.4.1Scene46
__3.4.2Project47
__3.4.3Debug48
__3.4.4Editor49
__3.4.5Help50
__3.4.6자주사용되는단축키51
3.5Scene탭활용하기52
__3.5.1노드의계층구조52
__3.5.2상단버튼기능53
__3.5.3루트노드53
__3.5.4씬인스턴싱활용54
3.6Import탭이해하기55
__3.6.1Import설정의필요성56
__3.6.2Import준비과정56
__3.6.3ImportAs기능57
__3.6.4Reimport기능59
3.7FileSystem탭활용하기60
__3.7.1리소스관리60
__3.7.2폴더및파일탐색61
__3.7.3ChangeSplitMode기능61
__3.7.4우클릭기능62
3.8작업화면상단UI이해하고활용하기65
__3.8.1작업공간전환버튼65
__3.8.2탭바이해하기66
__3.8.3뷰포트툴바익히기67
3.9뷰포트다루기71
__3.9.1기본조작71
__3.9.22D뷰조작72
__3.9.33D기본조작72
__3.9.4FPS스타일조작73
3.10하단패널활용하기74
__3.10.1Output정보확인74
__3.10.2Debugger활용75
__3.10.3Audio관리76
__3.10.4Animation작업76
__3.10.5ShaderEditor활용77
3.11플레이테스트버튼사용하기79
3.12Inspector,Node,History탭활용하기81
__3.12.1Inspector탭기능81
__3.12.2Node탭기능83
__3.12.3History탭기능84
3.13ProjectSettings다루기86
__3.13.1General설정86
__3.13.2InputMap설정87
__3.13.3Localization설정87
__3.13.4Globals설정88
__3.13.5Plugins설정89
__3.13.6ImportDefaults설정90
3.14EditorSettings바꾸기91
__3.14.1Interface설정91
__3.14.2Network설정92
__3.14.3FileSystem설정92
__3.14.4Docks설정93
__3.14.5TextEditor설정94
__3.14.6Editors설정95
__3.14.7Run설정96
__3.14.8Input설정96
__3.14.9Export설정97
__3.14.10Shortcuts설정98
리플레이99/QUIZ99

LEVEL4GDScript기초익히기101
4.1스크립트파일만들기102
__4.1.1씬생성102
__4.1.2스크립트파일생성및노드연결104
4.2Helloworld!출력하기108
__4.2.1스크립트작성108
__4.2.2스크립트노드부착109
4.2.3스크립트테스트110
4.3주석이해하기112
__4.3.1코드설명작성112
__4.3.2특정코드실행차단113
4.4확장이해하기114
__4.4.1확장이란?114
__4.4.2사용할수있는확장기능탐색115
4.5변수활용하기117
__4.5.1변수선언117
__4.5.2변수타입118
__4.5.3변수사용법120
__4.5.4변수실습121
4.6상수사용하기123
__4.6.1상수선언123
__4.6.2상수의필요성124
4.7열거형활용하기125
__4.7.1열거형선언125
__4.7.2열거형사용법127
4.8배열다루기128
__4.8.1배열생성128
__4.8.2배열사용법129
4.9함수만들기134
__4.9.1함수정의134
__4.9.2데이터전달135
__4.9.3반환값처리136
__4.9.4반환데이터타입명시137
4.10통과이해하기139
__4.10.1pass사용법139
__4.10.2pass의필요성141
4.11조건문활용하기142
__4.11.1비교연산자142
__4.11.2if조건문143
__4.11.3elif조건문144
__4.11.4else조건문145
__4.11.5match조건문146
__4.11.6조건문실습147
4.12반복문사용하기149
__4.12.1for반복문149
__4.12.2while반복문151
__4.12.3break제어문152
__4.12.4continue제어문153
__4.12.5반복문실습154
4.13클래스이해하기156
__4.13.1클래스의정의와구조156
__4.13.2클래스확장157
__4.13.3인스턴스생성159
__4.13.4노드와클래스관계160
__4.13.5클래스의확장성과재사용성160
4.14객체지향프로그래밍이해하기162
__4.14.1클래스와인스턴스의관계162
__4.14.2상속과오버라이딩164
__4.14.3캡슐화165
__4.14.4다형성166
__4.14.5상속구조의예시166
__4.14.6객체지향프로그래밍의장점168
리플레이169/QUIZ169

PART2게임만들기LEVEL52D레이싱게임만들기173
5.1실습준비하기174
__5.1.1새프로젝트생성175
__5.1.2자료다운로드177
5.2자동스크롤이되는배경화면만들기181
__5.2.1폴더생성181
__5.2.2메인게임및배경화면씬생성182
__5.2.3배경씬노드구조생성186
__5.2.4렌더링설정변경191
__5.2.5배경추가194
__5.2.6흐르는배경의스크립트작성197
5.3자동차움직이기201
__5.3.1자동차씬생성201
__5.3.2키보드입력설정209
__5.3.3스크립트로자동차이동처리211
__5.3.4도로밖이동제한213
5.4컵케이크획득하기217
__5.4.1컵케이크씬생성217
__5.4.2컵케이크스크롤및충돌감지221
__5.4.3전역변수를이용한점수관리224
__5.4.4타이머를이용한컵케이크자동생성228
5.5점수화면표시하기237
__5.5.1점수표시UI씬생성237
__5.5.2점수실시간업데이트239
__5.5.3CanvasLayer를이용한화면표시240
미니챌린지244/리플레이245/QUIZ245

LEVEL63D이사가는날만들기247
6.1실습준비하기248
__6.1.1새프로젝트생성248
__6.1.2자료다운로드251
6.23D환경구성하기252
__6.2.1게임해상도변경252
__6.2.2메인게임씬생성253
__6.2.3이사할집씬생성258
6.3이삿짐준비하기269
__6.3.1가구씬생성269
__6.3.2그밖의가구씬생성274
6.4게임플레이구현하기277
__6.4.1키보드입력설정277
__6.4.2하늘에서가구떨어트리기구현279
6.5게임오버구현하기284
__6.5.1점수저장284
__6.5.2게임오버화면생성288
__6.5.3낙하감지와게임오버화면표시301
6.6게임시작화면구현하기309
__6.6.1시작화면구성309
__6.6.2게임시작버튼기능구현318
미니챌린지326/리플레이327/QUIZ327

APPENDIXA웹으로배포하기329
A.11단계:프로젝트빌드하기330
A.22단계:itch.io프로젝트생성하기333
A.33단계:파일업로드및웹플레이설정하기337
A.44단계:테스트및공개하기339

엔딩342
용어집343
찾아보기346

출판사 서평

게임개발의첫걸음,고도엔진으로첫게임을직접만들어보세요
이책은고도엔진을처음접하는독자를위해설치와기본화면부터GDScript문법,2D/3D게임제작까지단계적으로안내하는실전입문서입니다.기능과문법을단순히나열하는데그치지않고,배경을움직이고자동차를조작하며가구를옮기는실제제작과정을통해각개념이게임에어떻게적용되는지익힐수있도록구성했습니다.프로젝트와씬,노드의구조를이해하고변수,함수,조건문,반복문등프로그래밍의기초를익힌뒤2D레이싱게임과3D이사게임을완성합니다.마지막으로,완성한게임을웹에공개하는것까지다루고있어게임개발의전과정을경험할수있습니다.

이책만의특별한점
고도엔진설치와프로젝트생성부터에디터,노드,씬,파일시스템등게임제작에필요한기본구조를익힙니다.이어서GDScript문법을배우고,이를2D와3D게임에직접적용하며배운내용을실제기능으로연결합니다.

1.게임을만들며익히는GDScript
변수와상수,배열,함수,조건문,반복문,클래스와객체지향프로그래밍까지게임개발에필요한GDScript문법을예제와함께배웁니다.예제를직접실행하며각문법이게임에서어떻게작동하는지바로확인할수있습니다.
2.2D와3D를모두경험하는프로젝트실습
2D레이싱게임에서는움직이는배경과자동차,장애물,충돌,점수화면을구현합니다.3D이사게임에서는공간과가구를구성하고캐릭터를움직이며게임시작과종료화면까지완성합니다.서로다른두게임을제작하며2D와3D개발방식의차이를직접경험할수있습니다.
3.완성한게임을웹으로공개하는과정까지
게임을만드는데서끝나지않습니다.웹배포를위한프로젝트설정과파일변환,itch.io프로젝트생성과업로드과정을따라하며직접만든게임을다른사람과공유하는방법까지익힙니다.

이책은누가읽으면좋을까요?
게임개발을어디서부터시작해야할지막막한입문자
고도엔진과GDScript를실습으로익히고싶은학습자
2D와3D게임개발을한권으로경험하고싶은독자
작더라도하나의게임을끝까지완성하고싶은예비개발자
유니티나언리얼엔진외의새로운게임엔진을찾는개발자

이책에서다루는내용은무엇인가요?
고도엔진의특징을이해하고개발환경구축하기
인터페이스조작법과씬,노드의기본구조익히기
변수,함수,조건문,반복문등GDScript기초문법실습하기
입력,충돌,점수계산등게임의핵심로직구현하고디버깅하기
캐릭터조작과충돌,점수시스템을구현해2D레이싱게임완성하기
3D공간과오브젝트를구성하고상호작용을더해3D이사게임완성하기

책속에서

노드는고도엔진에서특정기능을담당하는레고블록이라고생각하면이해하기쉽습니다.하나의노드는하나의역할을수행하며이런노드가여러개모이면복잡한동작을수행하는오브젝트를구성할수있습니다./예를들어,Sprite2D노드는이미지를화면에표시하고,RigidBody2D노드는물리적인충돌과중력을처리합니다.Camera2D노드는화면에서보이는영역,즉시야(view)를결정합니다.이처럼각각의노드는하나의명확한목적을가지고있으며,이를조합함으로써다양한게임요소를만들수있습니다.(42쪽)

[TextEditor(텍스트에디터)]는스크립트작성과편집에관련된다양한옵션을제공하는설정메뉴입니다.코드편집기의외형과동작방식을세부적으로조정할수있으며,개발자가선호하는작업환경을구성하는데사용됩니다.GDScript를작성할때사용하는텍스트편집기환경을설정할수있으며글꼴,테마색상,자동들여쓰기,코드자동완성,줄번호표시여부등을조절해개발자취향에맞는코딩환경을구성할수있습니다.(94쪽)

열거형은초깃값을별도로지정하지않으면자동으로0부터시작해1씩증가하는숫자가각항목에차례대로할당됩니다.즉예시에서ALLIANCE는0,ENEMY는1,UNKNOWN은2가됩니다.만약특정항목에초깃값을지정하면그이후항목부터는해당값을기준으로1씩증가해자동으로할당됩니다.예를들어,enum{IDLE=10,RUN,JUMP=14}라고작성하면IDLE은10,RUN은11,JUMP는14가할당됩니다.이렇게초깃값을지정하면특정범위에서시작하는숫자를표현할때편리합니다.(126쪽)

씬폴더내에게임씬파일이만들어지고해당씬이자동으로열립니다.씬을만들때설정했던것과같이2D게임을위한가장기본적인'Node2D'노드를최상위(root)노드로하는새로운씬이만들어집니다.'Node2D'는2D공간의위치,회전,크기등기본정보를관리하는만능노드로생각하면편리합니다.(183쪽)

scroll_offset.y+=스크롤속도*delta는실제움직임을만드는핵심코드입니다.여기서delta는이전프레임과현재프레임사이의시간간격을의미하는데,이값을곱해주는것이매우중요합니다.delta를곱하면컴퓨터성능과관계없이모든환경에서배경이항상일정한속도로움직이게만들수있기때문입니다.예를들어,성능이느린컴퓨터에서는fps(프레임/초)가느려서func_process(delta)함수를호출하는빈도가줄어듭니다.대신delta의값이더커지므로한프레임당배경이움직이는양을늘려속도가일정하게보이도록만들수있습니다.(199쪽)

그렇다면점수를저장할변수는어디에만들어야할까요?만약'컵케이크.gd'에만들면컵케이크가사라질때점수도함께사라집니다.'자동차.gd'에만들어도되지만점수,최고기록,플레이어생명등게임전체에서공유해야할데이터가많아지면관리가복잡해집니다.이때사용하면좋은것이바로전역변수(싱글턴)입니다.프로젝트어디에서나단하나의이름으로접근할수있는공용저장소로생각하면편리합니다.(224~225쪽)