이 글은 Sandrop 시리즈의 7번째 기록입니다. (총 23개)

오늘 한 일

  • 디자인 제안(캔디팝 리스킨)을 검토하고 적용 범위를 하이브리드로 확정
    • 이유: claude design의 제안대로 화면 전체를 7색 캔디 팔레트로 스냅하면 도안(그림)까지 그 7색에 갇힌다. 실제로 샘플을 뽑아 보니 도안이 제대로 인식되지 않는 경우도 있고 촛불은 흰 덩어리가 됐다. 도안은 이 게임의 콘텐츠라 훼손하면 안 된다
    • 결론: UI(버튼·팝업·아이콘·배경)만 캔디로 갈아입히고, 도안은 색상(hue)을 그대로 두고 채도만 올려 화면 톤에 어울리게 함
  • HUD 가독성 2종 — 상단에 완성 목표 도안 썸네일, 지금 부을 수 있는 색 힌트 점
    • 이유: 무엇을 만드는 중인지 화면 안에 없어서, 뭘 향해 붓는지 모른 채 손이 움직였다
  • 캔디팝 리스킨 — 팔레트 토큰, 서체(Baloo2 + Gothic A1) 번들, 아이템 아이콘 3종, 하트·코인 심볼, 승리/막힘 팝업
    • 서체는 런타임 다운로드가 아니라 앱에 넣어 배포 — 오프라인에서도 켜지는 게 이 게임의 전제다. 필요한 글자만 남겨 2.2MB → 134KB로 줄임
    • 아이콘은 라이브러리를 새로 들이지 않고 직접 그림 — 의존성 하나 늘리는 것보다 저렴했다
  • 레벨 선택을 격자 → 여정(journey)형으로 바꾸고 진입 프리뷰 추가
    • 이유: 200개가 격자로 한 번에 펼쳐지면 “얼마나 남았는지”만 보이고 나아가는 느낌이 없다. 세로로 이어지는 길에 다음 도전이 가운데로 오게 스크롤을 맞춤
    • 진입 프리뷰: 들어가기 전 1.6초 동안 완성할 그림을 크게 보여준다. 아무 곳이나 탭하면 즉시 스킵
  • 여정에서 스포일러 제거
    • 앞으로 할 레벨은 도안도 난이도도 숨기고 ??? 로 표기 — 미리 다 보이면 궁금할 게 없다
    • 난이도 배지는 어려움·매우 어려움에만 붙임. 쉬운 걸 “쉬움”이라 붙여 놓을 이유가 없다
    • 현재 도전 노드의 버튼은 “PLAY”
  • 게임오버·재화 규칙을 두 번에 걸쳐 다시 짬
    • 1차: 하트를 입장료로 — 레벨에 들어갈 때 하트 1을 내고, 이기면 돌려준다. 막혔다고 추가로 깎지 않는다
    • 2차(확정): 두 재화의 역할을 갈랐다. 코인은 진행을 사고(이어하기 900), 하트는 새 판에 들어간다(진입·다시하기)
    • 하트가 0이면 코인 900으로 하트 5개를 사거나 광고를 보고 1개를 받는다
    • 게임 중에는 하트·코인을 아예 표시하지 않음 — 재화는 목록·상점·게임오버에서만 보인다
  • 시작 코인을 0으로 내리고 일일 접속 랜덤 보상을 기획
    • 이유: 코인을 쥐여주고 시작하면 상점을 배울 계기(첫 결핍)가 사라진다. 대신 매일 첫 접속에 상자를 열게 해서 초반 코인 획득 경로를 만든다 (구현은 다음)
  • 상점 신설 — 스타터 번들·NO ADS·코인팩 3종·아이템 3종
    • 결제(IAP)는 수익화 마일스톤에서 붙일 거라 지금은 카드와 가격만 두고 “준비 중”으로 비활성
    • 아이템 코인 구매는 지금 동작. 레벨 선택 상단의 코인을 누르면 상점이 열린다
  • 승리 팝업 개편 — 카드 폭을 1.5배로 키우고, “광고 보고 코인 2배”를 주 버튼으로, 다음 레벨 버튼은 1초 뒤에 등장, 우상단에 닫기(X)
    • 이유: 다음 레벨 버튼이 같이 뜨면 광고 제안을 읽기 전에 눌러 넘어간다. 보상형 광고는 수익의 축이라 한 번은 읽히게 해야 한다
    • 늦게 나타나는 버튼이 화면을 밀어 올리면 그 순간 손가락이 닿아 잘못 눌린다 — 자리는 처음부터 잡아 두고 서서히 나타나기만 하게 함
  • 레벨 선택 노드를 크게 — 현재 도전 레벨 기준 위아래 2개씩만 보이도록
    • 이유: 한 화면에 레벨이 열 개 넘게 깔리니 목록처럼 보였다. 이 화면은 “지금 여기”를 보여주는 곳이지 카탈로그가 아니다

막힌 부분

  • 디자인 제안을 그대로 받으면 도안이 망가졌다 — 화면과 그림에 같은 팔레트를 강제한 게 원인.
    • 해결: 팔레트를 UI용과 도안용으로 분리. 도안은 색상을 보존한 채 채도만 올려 톤만 맞췄다
  • 서체를 구글 폰트 런타임 로딩으로 붙이면 첫 실행에 네트워크가 필요해진다 — 오프라인 플레이 전제와 충돌.
    • 해결: 폰트를 앱에 번들. 대신 한글 폰트가 무거워 실제 쓰는 글자만 남기는 서브셋으로 줄였다 (UI 문구를 새로 추가하면 서브셋을 다시 떠야 한다는 제약이 생김)
  • 레벨 선택 화면이 200레벨을 전부 미리 해석하느라 진입이 무거웠다.
    • 해결: 화면에 보이는 것만 그때그때 읽도록 지연 로드로 바꿈
  • 레벨 선택 테스트가 끝나지 않고 멈췄다.
    • 원인: 테스트의 가짜 시계에서는 에셋 읽기가 안정적으로 끝나지 않는다
    • 해결: 테스트에는 메모리 안에서 레벨을 만들어 주는 가짜 저장소를 주입해 파일 읽기를 아예 뺐다
  • 승리 팝업 폭을 고정했더니 내용이 죄다 왼쪽에 붙었다.
    • 원인: 닫기(X)를 얹으려고 겹치기 배치로 바꿨는데, 그 배치의 기본 정렬이 좌상단이다. 폭이 화면에 따라 늘던 때는 티가 안 났다
    • 해결: 정렬을 가운데로 지정 (구현은 TIL 6)

다음에 할 일

  • 일일 접속 랜덤 보상 구현 — 시작 코인이 0이라 초반 코인 획득 경로가 필수
  • 수익화 결선 — 상점 결제 연결, 승리 시 “광고 보고 코인 2배”, 게임오버 “광고 보고 이어하기”(버튼은 이미 있고 비활성)
  • 실기기에서 리스킨·여정·게임오버 3선택지 체감 확인

Series: Sandrop


Suggested Posts