26. First Game Tutorial
이 문서의 목표
지금까지 배운 System을 실제 개발 순서대로 엮어 작은 게임 하나를 완성한다.
왜 필요한가
개별 System을 아는 것과 실제 프로젝트에서 순서대로 조립하는 것은 다르다. 이 문서는 그 격차를 메운다.
진행 순서
1. 프로젝트 생성 + Package 설치 -> getting-started.md
2. RootScope 확인 (이미 준비됨) -> 02_Project_Setup
3. Addressables 구성 (Player, Enemy) -> 08_AssetSystem
4. Loading Scene 구현 -> 09_SceneSystem
5. Main Menu 구현 -> 12_UISystem
6. Game Scene 진입 + Player 스폰 -> 08_AssetSystem, 04_DI
7. Player 이동/애니메이션 (Game Layer) -> 03_Project_Structure
8. 체력/공격력 Stat 연동 -> 16_StatSystem
9. 피격 이펙트 + 사운드 -> 15_EffectSystem, 14_AudioSystem
10. Save (진행도 저장) -> 10_SaveSystem
11. Localization (텍스트 다국어화) -> 11_Localization
12. Popup (일시정지/게임오버) -> 12_UISystem
13. Diagnostics로 점검 -> 18_Diagnostics
14. Build -> getting-started.md, ReleaseChecklist.md
단계별 설명
1~2. 프로젝트 생성 & RootScope
getting-started.md의 1~4단계를 따른다. RootScope는 새로 만들 필요 없이 Configure() 끝에 게임 System만 추가한다.
3. Addressables 구성
Player/Enemy 프리팹을 Addressable Group에 등록하고 AddressableKeys 상수로 키를 관리한다.
4~5. Loading -> Main Menu
ISceneSystem.LoadAsync로 Loading Scene 진입, 로드 완료 후 INavigationService.PushAsync("MainMenu").
6~7. Game Scene & Player
Game Scene 진입 시 IAssetSystem.LoadAsync<GameObject>로 Player 프리팹을 로드하고 _resolver.Instantiate로 생성해 DI 주입을 받는다. 이동/애니메이션 로직은 Game/Controllers에 작성하고 매 프레임 로직은 TickSystem을 경유한다.
8. Stat 연동
Player 체력/공격력을 IStatSystem에 등록하고 장비/버프는 AddModifier로 반영한다.
9. 이펙트/사운드
피격 시 IVfxSystem.Play와 IAudioSystem.PlaySFXAsync를 Game Layer Adapter에서 함께 호출한다 (Runtime이 자동 연동하지 않으므로 직접 연결).
10~11. Save & Localization
진행도는 MemoryPack 직렬화 데이터로 ISaveSystem.SaveAsync, UI 텍스트는 전부 ILocalizationSystem.GetString 경유.
12. Popup
일시정지/게임오버 화면은 Popup.ShowAsync, 중첩 방지를 위해 UI.PopupCount Diagnostics를 확인한다.
13. Diagnostics 점검
Tools > Framework > Diagnostics에서 Asset 핸들 누수, Save 실패율, Stat Dirty Count를 확인한다.
14. Build
ReleaseChecklist.md를 확인 후 Release 빌드를 생성한다.
실습 과제
위 14단계를 따라 상태 3개(체력바, 공격, 저장/불러오기)만 있는 최소 게임 하나를 실제로 완성해본다.