토이 프로젝트
굿즈를 지켜라
데스크톱 게임
GIT - https://github.com/blank09114/GoodsGuardian
2026.01.07. 21:43
프로젝트 개요
- 개발 형태: Windows 게임
- 개발 인원: 1인
- 기술 스택: Unity, C#, Visual Studio
- 설치 및 실행 방법:
굿즈를 지켜라!.zip 다운로드 후 압축 해제, GoodsGuardian.exe 실행
게임 설명
- 고양이 미정이와 까칠이가 랜덤한 위치에서 굿즈를 떨어뜨립니다.
- 플레이어 캐릭터 프릴을 ←, → 키로 조작하여 굿즈를 받아냅니다.
- 시간이 지날수록 굿즈의 생성 간격과 낙하 속도가 빨라집니다.
멘탈(라이프)
- 초기 멘탈: 5칸
- 굿즈를 놓쳤을 때 멘탈 감소량
- 일반 굿즈 → 1칸 감소
- 스카디 굿즈 → 2칸 감소
- 한정판 스카디 굿즈 → 3칸 감소
- 멘탈이 모두 소진되면 게임 오버, 결과 화면에서 최종 생존 시간이 표시됩니다.
- 이 게임에 해피 엔딩은 없습니다.
주요 기능
- 플레이어 조작: 좌우 이동, 방향 반전
- 고양이: 선반 위에서 좌우 이동 및 방향 전환
- 굿즈 드롭 시스템: 시간이 지날수록 난이도 증가
- 굿즈 종류: 일반 / 스카디 / 한정판 스카디
- 멘탈: 굿즈가 바닥과 충돌할 시 멘탈 감소, 0이 되면 게임 오버
- 게임 루프: 메인 → 플레이 → 결과 씬 전환
- 사운드: 씬별 BGM 자동 전환(인트로, 플레이, 결과)
- UI: 생존 시간 타이머, 결과 화면에 최종 기록 표시
기술적 구현(Architecture & Code Design)
1. 프로젝트 구조
- PlayerController.cs
- Rigidbody2D 기반 좌우 이동(`FixedUpdate` → `MovePosition`)
- 입력(`Input.GetAxisRaw("Horizontal")`)으로 키 반응 처리
- 이동 방향에 따라 Sprite 반전 처리
- CatController.cs
- 고양이 AI: 일정 주기마다 무작위 방향 전환
- 벽 충돌 시 방향 반전
- `UpdateSprite()`로 이동 방향에 맞춰 Sprite Flip
- DropManager.cs
- 굿즈 생성/난이도 관리
- `Instantiate`로 굿즈 생성, 20초/40초 경과 시 새로운 굿즈 종류 추가
- 일정 주기마다 `gravityScale` 증가 및 생성 간격 감소 → 난이도 상승
- GoodsController.cs/GoodsType.cs
- Enum 기반 굿즈 타입 정의 (Normal / Scadi / Limited)
- 굿즈가 바닥과 충돌하면 피해량 전달 후 삭제
- 플레이어와 충돌 시 즉시 소멸
- GameManager.cs
- 전역 싱글톤
- 게임 타이머 UI 관리 (0.1초 단위 업데이트)
- 멘탈 시스템 관리 (Image 배열)
- 멘탈 소진 시 게임 오버 및 씬 전환
- UIManager.cs
- 결과 화면에서 최종 생존 시간 표시
- SceneController.cs
- `SceneManager` API를 통한 메인/플레이/결과 씬 전환
- SoundManager.cs
- 싱글톤 + `DontDestroyOnLoad`
- 씬 이름 기반 BGM 전환 (`sceneLoaded` 이벤트)
2. 주요 설계 포인트
- 싱글톤 패턴: GameManager, SoundManager는 전역 접근을 위해 싱글톤 적용
- 씬 기반 게임 루프: Main → Play → Result 구조로 명확한 흐름 설계
- 난이도 조절 알고리즘: 일정 시간마다 중력/생성 간격 조정 → 점진적 난이도 상승
- Enum 활용: GoodsType으로 굿즈 종류 및 피해량 정의 → 유지보수 용이
- UI 최적화: 타이머는 0.1초 단위 갱신 → 성능과 가독성 균형