본문으로 건너뛰기
게임 프로젝트 기초집LESSON 20

최종 실습: 2D 택배 분류 게임 출시 후보 완성하기

난이도초급 프로젝트
예상 시간120분
선수지식1~19강 결과물

20강. 최종 실습: 2D 택배 분류 게임 출시 후보 완성하기

1. 이번 강의에서 해결할 문제

기능이 각각 동작해도 시작부터 재시작까지 연결되고 긴 플레이와 잘못된 설정을 견뎌야 출시 후보가 됩니다. 전체 구조와 증거 문서를 하나의 완료 기준으로 묶습니다.

2. 학습 목표

3. 핵심 개념

최종 책임 흐름은 다음과 같습니다.

GameFlow ─상태─> Spawner / Input ─명령─> PackageActor
│ │
Difficulty + Selector ─데이터─────┘ Trigger 결과 1회

GameSession ─이벤트─> HUD / Audio / HighScoreStore

GameRules + PackageDefinition

GameFlow는 시스템 활성화, GameSession은 점수·목숨, Spawner는 생성 시점, Selector는 종류 순서, PackageActor는 이동·중복 차단, Presenter는 표시·사운드를 맡습니다.

4. 단계별 실습

4-1. 최종 프로젝트 구조

Assets/_Project/
├─ Art/ # 직접 제작 또는 라이선스 확인 에셋
├─ Audio/
├─ Data/ # GameRules, Difficulty, PackageDefinition
├─ Docs/ # 기획, 테스트, 알려진 문제, 포트폴리오
├─ Prefabs/Package.prefab
├─ Scenes/Main.unity
└─ Scripts/
├─ Core/ # GameSession, GameFlow, HighScoreStore
├─ Data/ # ScriptableObject 타입
├─ Gameplay/ # Spawner, Selector, Actor, Zone, Pool, Input
├─ UI/HudPresenter.cs
└─ Audio/AudioPresenter.cs

4-2. Inspector 연결 점검

Unity Editor·Inspector 작업

  1. Package Prefab에 SpriteRenderer, Collider2D, Rigidbody2D와 PackageActor를 연결합니다.
  2. Pool에 Prefab, Spawner에 Pool·SpawnPoint·Bounds·Difficulty·Selector를 연결합니다.
  3. Blue·Orange Zone에 각각 올바른 PackageDefinition을 연결합니다.
  4. Session에 GameRules, Flow에 Session·Spawner·Input·HighScoreStore를 연결합니다.
  5. HUD와 Audio Presenter의 이벤트 발행자·표시·클립 참조를 연결합니다.

필수 참조는 각 컴포넌트의 Awake에서 이름이 포함된 오류로 검증하고, null이면 해당 시스템 시작을 막습니다. Find 계열을 Update에서 호출하지 않습니다.

4-3. 구조 선택 근거

문서 · 파일 경로: Assets/_Project/Docs/Architecture.md

Architecture.md
# 구조 선택 근거
- Update: 현재 택배의 연속 이동과 입력 읽기에만 사용한다.
- Coroutine: 택배 생성과 간격 대기를 순서대로 표현한다.
- Object Pool: 빠르게 반복되는 동일 Prefab의 생성·제거를 재사용한다.
- ScriptableObject: 택배·게임·난이도 설계 수치를 인스턴스와 분리한다.
- event: GameSession이 HUD와 Audio 구현을 모르게 한다.

4-4. 최종 테스트

문서 · 파일 경로: Assets/_Project/Docs/FinalTest.md

FinalTest.md
# 최종 테스트
- [ ] 시작 → 플레이 → 일시정지 → 재개 → 게임 오버 → 재시작
- [ ] 두 종류 이상과 대응 Zone, 정답 점수 증가
- [ ] 오분류·놓침에서 목숨 정확히 1 감소
- [ ] 점수·최고 점수·목숨·상태 UI 일치
- [ ] 3회 연속 허용, 4회째 다른 종류
- [ ] 시간 경과에 따른 간격·속도 변화와 최소값
- [ ] 0.1초 빠른 생성에서 Pool·중복 판정 오류 없음
- [ ] 택배가 없는 상황에서 오류 없음
- [ ] 목숨 0에서 입력·추가 생성 중단
- [ ] Inspector 연결 누락에서 구체적 오류
- [ ] 15분 플레이에서 메모리·비활성 객체·구독의 지속 증가 없음

4-5. 빌드 전과 알려진 문제

ReleaseChecklist.md에 Scene, 해상도, 아이콘, 저작권, 입력, Console과 독립 빌드 결과를 기록합니다. KnownIssues.md에는 재현 절차, 영향, 임시 대응과 다음 수정 항목을 작성합니다.

4-6. 포트폴리오 기록

문서 · 파일 경로: Assets/_Project/Docs/Portfolio.md

Portfolio.md
# Delivery Sorter Release

## 게임 소개
색과 아이콘을 빠르게 읽어 떨어지는 택배를 올바른 지점으로 보내는 2D 액션 게임입니다.

## 맡은 기능
게임 상태, 데이터 기반 난이도, 연속 생성 제한, 판정 이벤트, HUD, Pool과 로컬 최고 점수

## 기술적 문제 해결
겹친 Trigger의 중복 점수를 PackageActor.TryResolve로 한 번만 허용하고 재현 테스트를 추가했습니다.

## 핵심 재미와 현재 한계
- 재미: 짧은 판단과 즉시 피드백, 점차 빨라지는 압박
- 한계: 키보드 중심 입력, 2종 콘텐츠, 로컬 기록만 지원
- 다음 개선: 실제 기기 터치, 프로파일링, 튜토리얼·추가 택배

4-7. 최종 파일 확인

PowerShell · 실행 위치: 프로젝트 루트

Get-ChildItem .\Assets\_Project\Scripts -Recurse -Filter *.cs
Get-ChildItem .\Assets\_Project\Docs -Filter *.md
Get-Content .\ProjectSettings\ProjectVersion.txt
git status --short

예상 결과: 책임별 코드와 기획·테스트·출시·포트폴리오 문서, 정확한 Unity 버전이 보입니다. C# 컴파일과 Play Mode·빌드 검증은 Unity Editor와 독립 실행 파일에서 수행합니다.

4-8. 이후 확장 아이디어

  • 모바일 입력: Input System Touch Action, 드래그 어댑터, Safe Area와 진동 피드백
  • 성능 최적화: 실제 기기 Profiler, Sprite Atlas, 목표 FPS·메모리 예산
  • 광고: 실제 SDK는 추가하지 않고 게임 규칙과 Adapter 경계, 테스트 광고·개인정보 정책을 먼저 설계
  • 스토어 출시: 아이콘·스크린샷·서명 키·등급·개인정보와 현재 스토어 정책 점검

5. 코드가 동작하는 이유

설계 데이터와 런타임 상태, 생성과 판정, UI와 오디오가 이벤트 경계로 연결됩니다. 한 시스템을 바꾸어도 다른 책임의 내부 코드를 덜 수정하며, 상태 전환이 입력·생성·화면을 일관되게 조정합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

최종 실습: 2D 택배 분류 게임 출시 후보 완성하기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“최종 실습: 2D 택배 분류 게임 출시 후보 완성하기” 구현을 설계할 때 책임과 구조를 올바르게 나눈 선택은 무엇인가요?
  2. 문제 2“최종 실습: 2D 택배 분류 게임 출시 후보 완성하기”에서 ‘Pool 상태 초기화 누락’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

20강. 최종 실습: 2D 택배 분류 게임 출시 후보 완성하기 미완료 상태