5.0 KiB
5.0 KiB
Systems
게임의 주요 시스템 구조를 정리합니다.
Scene Flow
GameFlowManager가 전체 흐름을 관리합니다.
다음 리팩터링 이후에는 GameFlowManager가 화면을 직접 그리지 않고, 화면별 View를 호출하는 구조로 정리합니다.
Intro
-> Opening Story
-> MapPreview
-> Main
-> Result
-> DutyFreeShop
-> MapPreview
Save / Load
관련 파일:
Assets/Scripts/Flow/GameSaveData.csAssets/Scripts/Flow/GameSaveManager.cs
저장하는 것:
- 현재 맵 인덱스
- 해금된 맵 인덱스
- 총 마일리지
- 면세점 구매 아이템 수량
Map Data
관련 파일:
Assets/Scripts/Maps/MapId.csAssets/Scripts/Maps/MapDefinition.csAssets/Scripts/Maps/MapDatabase.csAssets/Scripts/Maps/Definitions/*.csAssets/Scripts/Course/*.cs
역할:
- 맵 이름
- 배경
- 발판 스킨
- 도착 지점
- 목표 거리
- 제한 시간
- 보상
- 다음 맵
- 코스 패턴
현재는 MapDefinition이 독립 타입인 CourseStep[] 형태의 openingSteps, loopSteps를 들고 있습니다.
맵 생성 코드는 Maps/Definitions/*Map.cs로 분리했습니다.
다음 리팩터링에서는 CourseProfile을 만들고 맵별 파일에서 코스 프로필을 연결합니다.
목표 구조:
MapDatabase
-> TutorialIncheonMap.Create()
-> JapanMap.Create()
-> ChinaMap.Create()
-> AmericaMap.Create()
MapDefinition
-> CourseProfile openingCourse
-> CourseProfile loopCourse
PlatformSpawner
-> CourseProfile 실행
Gameplay Runtime
관련 파일:
Assets/Scripts/GameManager.csAssets/Scripts/PlayerController.csAssets/Scripts/PlatformSpawner.csAssets/Scripts/Platform.csAssets/Scripts/ItemPickup.csAssets/Scripts/ItemFeedbackEffect.csAssets/Scripts/MileagePickup.csAssets/Scripts/FinishGate.cs
역할:
- 게임 속도 증가
- 거리/시간 계산
- 목숨/피격/무적
- 아이템 효과
- 발판/장애물/아이템 스폰
- 아이템 획득/방어 성공 이펙트
- 도착 지점 통과 시 클리어
현재 GameManager는 플레이 진행과 UI를 함께 담당합니다.
리팩터링 후에는 아래처럼 책임을 나눕니다.
| 책임 | 목표 스크립트 |
|---|---|
| 플레이 세션 총괄 | GameManager |
| 거리/시간/클리어 판정 | StageProgressTracker |
| 도착 게이트 생성/정리 | FinishGateController |
| 목숨/피격/무적/방어막 | DamageController |
| 아이템 효과 | ItemEffectController |
| 왼쪽/오른쪽 HUD | GameplayHudView |
| 튜토리얼 안내창 | TutorialGuideView |
| 튜토리얼 단계 제어 | TutorialGuideController |
Flow UI
현재 상태:
GameFlowManager안에 결과 화면, 면세점, 인트로, 맵 프리뷰, 디버그 메뉴 UI 생성 코드가 들어 있음- 공통 UI 오브젝트 생성과 에셋 로딩도 같은 파일에 있음
목표 구조:
| 책임 | 목표 스크립트 |
|---|---|
| 흐름 제어 | GameFlowManager |
| 현재 화면 상태와 공통 데이터 | FlowScreenContext |
| 인트로 화면 | IntroScreenView |
| 오프닝 스토리 | OpeningStoryScreenView |
| 결과 화면 | ResultScreenView |
| 면세점 화면 | DutyFreeShopView |
| 맵 프리뷰 | MapPreviewScreenView |
| 디버그 메뉴 | DebugMenuView |
| 공통 UI 생성 | FlowUiFactory |
| UI 에셋 로딩 | FlowAssetLoader |
디버그 메뉴는 현재 Esc로 열며, 인트로/게임 시작/출국 실패/출국 성공/면세점/지도 화면으로 바로 이동합니다.
리팩터링 후에도 개발 빌드 전용 기능으로 유지합니다.
DutyFreeShop
현재 상태:
- 화면 흐름은 있음
- 코드 오버레이 화면은 면세점 내부 배경과 상품 카드형 UI로 표시함
- 도시락, 방어막, 운동화, 마일리지 카드의 보유 수량과 가격을 표시함
- 구매 데이터 저장은 있음
- 실제 장착 슬롯과 플레이 시작 전 준비 구조는 아직 미완성
다음 방향:
- 스테이지 시작 전 장착 슬롯에 넣기
- 가방 업그레이드로 슬롯 수 증가
- 스테이지 중 장착 아이템 사용/소모
Finish Gate
FinishGate는 맵별 도착 지점 이미지를 Resources에서 불러옵니다.
현재 도착 지점:
- 튜토리얼: 출국 게이트
- 일본: 토리이
- 중국: 패방
- 미국: 자유의 여신상/뉴욕 도착지
플레이어가 도착 지점 트리거를 통과하면 클리어 처리합니다.
도착 게이트가 생성될 때는 PlatformSpawner가 빈 착지 발판을 같은 위치에 함께 깔아, 게이트가 배경 위에 떠 보이지 않게 합니다.
도착 게이트 뒤로는 새 발판, 장애물, 아이템 코스가 더 생성되지 않도록 스폰을 중지합니다.
Minimap
하단 미니맵은 현재 삭제했습니다.
이유:
- 현재 튜토리얼/코스 설계에는 화면 하단 미니맵보다 실제 발판과 도착 지점 가독성이 중요합니다.
- 이후 필요하면 별도 작은 진행 바 형태로 다시 설계합니다.