← 홈으로

2026 · 개인 · 비공개

PlanEatJJJ Studio · 3인 팀

우주 쓰레기부터 행성까지 삼키며 자라는 모바일 서바이벌 게임: 3인 팀, Google Play 출시 준비

역할
플레이어·성장·형태 분기·세이브·백엔드·수익화 (3인 중 1)
기간
2026.04 – 현재
상태
Google Play 출시 준비 (비공개 테스트, 9월 목표)
스택
Unity 6, C#, URP, UGS, Google Play Games

배경

셋이서 만드는 모바일 게임입니다. 규칙은 하나, 나보다 작으면 먹이, 나보다 크면 죽음. 가상 조이스틱 하나로 병든 우주를 누비며 먹고 성장하고, 커질수록 시야가 넓어지고 더 큰 것을 먹을 수 있지만 어둠 속에는 더 큰 오염 천체가 떠돕니다. 2026년 4월 23일 시작했고, 9월 20일 Google Play 출시를 목표로 비공개 테스트를 돌리고 있습니다.

팀은 세 명입니다. 저(SJ)는 플레이어·흡수/성장·형태 분기·세이브·백엔드·수익화, HJ는 카메라·씬/메뉴·로비·배경 연출, WJ는 오브젝트/스폰·위협·난이도·특성·게임필을 맡았습니다.

내가 만든 것

  • 플레이어와 흡수·성장: Rigidbody 이동, 접촉 시 크기 비교 후 자동 흡수, 부피 보존 성장(V = s³를 합산해 세제곱근). 흡수의 손맛은 ScalePunch로 따로 두어 성장 경로가 바뀌어도 피드백은 남게 했습니다. 6단계 성장 자동 전환과 단계별 흡수 필터, 단계 전환 줌 아웃 연출.
  • 형태 분기: 성장 도중 흡인형(넓은 반경)·응축형(강한 인력)·표류형(빠른 기동) 갈림길. 데이터·컨트롤러·선택 UI를 만들고, 뷰를 IFormSelectionView로 분리해 HJ가 UI를 갈아끼울 수 있게 했습니다.
  • 입력·세이브: 자동 부트되는 가상 조이스틱 오버레이, JSON 단일 파일 세이브와 자동 저장/로드 바인더.
  • 백엔드(UGS): 익명 로그인, 클라우드 세이브(런 세이브와 메타 진행을 다른 키로 분리해 사망 시 세이브 삭제가 영구 진행을 지우지 않게), 리더보드(검증 스크립트가 통과시킨 점수만, 실패는 보류 후 재시도·반려는 폐기). 원칙은 “실패해도 게임은 로컬로 완전 동작”.
  • Google Play Games: 익명 계정을 GPGS로 승격(Link)해 PlayerId를 유지, 기기 변경 복귀, 네이티브 리더보드 UI와 폴백, 게이머 태그 동기화.
  • 출시 실무·수익화: Play Console 앱 설정, keystore 비밀번호 환경변수 자동화, 개인정보처리방침·계정 삭제 요청 페이지(공개 레포로 Pages), 회원 탈퇴, 앱 아이콘·스플래시, 광고 시청 부활 버튼.

팀이 같이 일하는 방식

  • 인터페이스 계약으로 나눠 만들기: 흡수는 IAbsorbable { float Size; void OnAbsorbed(GameObject) } 계약을 먼저 정하고 제가 감지·판정·성장을, WJ가 구현체와 스폰을 맡았습니다.
  • feature 브랜치 → PR → main, 씬 충돌 방지 규칙을 첫 주에 문서화했습니다.
  • Claude Code를 팀 도구로: 레포의 CLAUDE.md에 “작업 전 팀원 작업 동기화, 작업 후 백로그 기록, 설계 결정은 이유와 대안까지 DECISIONS.md”를 규칙으로 두고, /spec /decide /issue /done /sync 같은 슬래시 명령을 만들었습니다. 결정 기록이 140건 넘게 쌓였고, 새 팀원은 setup.ps1 하나로 명령어와 codegraph 훅을 받습니다.
  • 회의록은 봇이: 디스코드 정기미팅을 제가 만든 미팅 봇이 녹음·전사·요약해 별도 레포에 남깁니다.

배운 것

  • 실패를 조용히 삼키는 백엔드가 모바일 게임에는 맞았습니다. 오프라인·미로그인·GPGS 미설치를 전부 no-op으로 두니 어떤 기기에서도 게임이 먼저 돕니다.
  • 출시는 코드보다 정책이 먼저입니다. 비공개 테스트 요건(테스터 12명 × 14일)을 콘솔에서 확인한 날이 출시일을 정했습니다.