C# 및 Unity 3D 개발 역량 확보를 목적으로 제작한 1인 개발 3D 생존·구출 게임입니다.
섬에 고립된 부상자를 구출하기 위해 자원을 수집·운반하고 구급차를 수리하면서,
제한 시간 내 NPC 체력 게이지를 채워 탈출하는 것이 목표입니다.
| Scene | 설명 |
|---|---|
| Title Scene | 게임 시작 화면 |
| Loading Scene | 리소스 로드 및 전환 화면 |
| Game Scene | 메인 게임플레이 |
| 항목 | 내용 |
|---|---|
| 개발 형태 | 1인 개발 (기획 · 개발 · QA) |
| 개발 기간 | 2025.03 — 2025.06 |
| 엔진 | Unity 2022.3 |
| 언어 | C# |
GameStatus,AudioController를 씬 간 단일 인스턴스로 유지Awake()에서 중복 인스턴스 즉시Destroy→ 전역 상태 일관성 보장AudioController에DontDestroyOnLoad적용 → 씬 전환 중 BGM 연속 재생
Queue<IObject>기반으로 Coin · Trap · FXObject 재사용- Lazy Instantiation 방식 → 풀이 비었을 때만 신규 생성,
Instantiate/Destroy비용 제거 IObject추상 클래스를 공통 인터페이스로 사용 →ObjectPool이 구체 타입에 의존하지 않음 (OCP 준수)
Stepenum(Move / Repairing / Eating / Emotion / Rescue)으로 플레이어 행동 명확히 분리nextStep버퍼 도입 → 상태 진입(onEnter) 처리가 정확히 1회만 실행되도록 보장stepTimer로 각 상태의 지속 시간을 독립적으로 관리
SceneManager.sceneLoadedC# 델리게이트 이벤트 구독- 씬 전환 시 BGM 자동 교체 → 씬과 오디오 시스템 간 직접 결합 제거
- 새 씬 추가 시
PlayBGMForScene()내switch분기만 확장하면 됨
OnEnter / OnExit / OnInit / OnDisabled4단계 수명주기 훅 강제화Trap코루틴 종료 후PoolObject()직접 호출 → 외부 관리자 없이 자율 반환
- NPC 구출 완료 시
GameState를Normal → FeverTime으로 전환 Coroutine으로 7초간 이동 속도 증가·체력 회복·스트레스 초기화 버프 비동기 관리GameStatus.StartFeverTime() / EndFeverTime()으로 전역 상태 변경 → 다른 시스템이IsFeverTime프로퍼티만으로 분기
- Timer 기반
Instantiate(): 일정 시간 경과마다 일반 아이템 신규 생성 - Object Pooling: Coin · Trap은
Queue<IObject>풀에서 재사용 → GC 부하 최소화
유저 테스트 피드백을 반영하여 레벨을 반복 개선했습니다.
| Category | Feedback (Problem) | Solution (Action) |
|---|---|---|
| UX & UI | 키 안내 불일치, 목표 불명확 | UI 가이드 동기화 및 미션 마커 추가 |
| Balance | 체력·스트레스 소모가 빨라 과도한 난이도 | 소모율 재조정 및 아이템 스폰 빈도 최적화 |
| Game Loop | 고스트레스 시 이동 저하로 데스 스파이럴 발생 | 이동 패널티 수치 조정 |
| Pacing | 맵이 넓어 이동 시간이 길고 지루함 | 맵 레이아웃 압축으로 조우 밀도 향상 |
- 1인 개발을 통해 기획·아트·개발 파트 분담과 협업의 필요성을 직접 체감
- QA 및 베타 테스트의 중요성 확인
- 개발자의 플레이 경험과 유저의 플레이 경험이 크게 다름
- 난이도, 인게임 설명 등 전반에 걸친 피드백 루프가 필수임을 학습
- 그래픽 에셋의 한계로 인해 일부 미완성 요소 존재
Made with ❤️ by dae-won-kim · Unity 2022.3 · C#