🎨 메인 시스템과 실측이 다 끝났다 (2026-09-05). 남은 두 항목은 전부 연출·리소스다. 막힌 게 아니라 미룬 것이라
art/폴더에 있다.상태가진행중이 아니라대기인 것은 지금 아무도 손대고 있지 않다는 뜻이다.
배경
"좋은 아이템이 나왔다"를 플레이어가 확인할 수 있어야 뽑기가 재미가 된다. 서버가 결과를 내려줘도 화면이 없으면 인벤토리 숫자만 조용히 늘 뿐이다.
S_GachaDrawResponse는 이미 연출용 델타(Rewards)와 인벤 반영용 누적(ItemChangeInfos)을
분리해서 내려준다 — 뽑힌 순서 그대로 하나씩 열어 보이는 연출이 가능하다.
희귀도(EGlobalRarity)도 함께 실려 있고, 등급 색상은 Enum.xlsx에 정의돼 있다.
할 일
◐ = 일부만 됐다 · ⏸ = 기획·서버가 먼저 와야 한다(클라가 지금 못 한다) 🎨 = 연출·리소스. 의도적 후순위다 — 메인 시스템이 선 뒤에 한다
✅ ⏸ 넷이 전부 풀렸다 (2026-09-02). 서버가 T-026·T-027을 내렸다 (이슈 #23). main 병합도 끝났다(
cf0a28a) — 예전에 적어 둔 "아직 병합되지 않았다"는 낡은 경고라 지웠다.✅ 메인 시스템 넷의 코드·씬 배선과 실측이 다 끝났다 (2026-09-05). 남은 것은 🎨 둘뿐이다.
- [x] 가챠 화면 — 단차/10연차 버튼 (
GachaPresenter) - [x] 가챠 화면 · 풀 목록 · 비용 표시 — 풀 2종 × (1회·10연차) = 버튼 4개를 인스펙터 줄로 받는다.
GachaInfoTable의Name·CostSingle·CostMulti를Start에서 읽어 채운다. ⚠️ 비용을 상수로 박지 않았다 — 10연차가 단차 × 10이라는 보장이 없다(컬럼이 따로다) - [x] 보유 골드 표시 · 부족하면 버튼 비활성 —
CurrencyChanged를 구독해 모자란 줄만 잠근다. 대기 잠금과 함께 보므로 대기가 풀려도 못 사는 버튼은 잠긴 채로 남는다 (클라 판단은 표시용일 뿐, 거절은 서버가 한다) - [x] 결과 창 — 뽑힌 목록을 5열 × n행으로 한 번에 표시(수량 표시는 끔), 희귀도 색상 적용
(
UI/System/GachaResultPresenter/, 칸은SlotView프리팹 재사용) - [ ] 🎨 결과 연출 — 한 번에 띄우는 지금 방식 대신 뽑힌 순서대로 하나씩 공개
→ 길은 이미 열려 있다(
S_GachaDrawResponse.Rewards가 뽑힌 순서의 델타다). 못 해서가 아니라 뒤로 미룬 것이다 — 보상 종류 축(T-026)이 들어오면 연출이 다뤄야 할 대상이 바뀐다. 한 화면에서 아이템·캐릭터를 함께 처리하는 모양이 정해진 뒤에 만든다 - [ ] 🎨 희귀도 스프라이트 — 지금은
RarityPalette가 색만 돌려준다 (코드에 TODO. 표 한 줄과SlotView.Bind한 줄을 sprite 대입으로 갈아끼우면 끝난다). 색으로 이미 구분되므로 기능은 서 있다. 리소스가 준비되는 시점에 붙인다 - [x] 캐릭터 결과와 아이템 결과를 한 화면에서 처리한다
→
GachaResultPresenter.ToSlotData가GachaRewardInfo.RewardType으로 갈라ItemId/CharacterTid를 읽는다. 이름도GetItemName/GetCharacterName으로 갈린다. ⚠️ 분기 전에는ItemId를 무조건 읽어 캐릭터 보상이 빈 칸으로 그려졌다 — 필드가 추가만 된 형태라 컴파일도 경고도 통과했다. 자원 풀만 뽑던 동안엔 드러나지 않던 잠복 결함이다. ※ 아이템 전용이던SlotView.Bind(int, int, GlobalRarity)래퍼는 성립하지 않게 되어 걷어냈다 - [x] 뽑은 뒤 캐릭터 목록·인벤토리·골드 표시가 재로그인 없이 갱신되는지 실측 (2026-09-05 확인)
→ 인벤토리는 확인됐다 (2026-08-26, 10연차 실행 검증).
캐릭터는 지급 직후 서버가
S_CharacterListResponse를 다시 민다 — 뽑기 응답에는 개체 PK가 없다(DB가 늦게 발급한다). 골드는S_CurrencyResponse로 온다 - [x] 실패 응답 처리 — 연출을 재생하지 않고 사유를 보여준다
→
GachaPresenter.OnGachaFailed가ResultMessages.ToText로 문구를 만들어 대기를Fail로 닫고,GachaResultPresenter는GachaCompleted만 구독하므로 팝업이 안 뜬다.NotEnoughCurrency = 102("골드가 부족합니다.")를 표에 넣었다 — 전에는 "알 수 없는 오류가 발생했습니다. (코드 102)" 로 떴다. 골드 부족은 정상적인 실패 경로다 - [x] 씬 배선 — 버튼 4개를
Gacha Presenter의Draws에 화면 순서대로 넣었다 (2026-09-04).[0]=풀1x1 ·[1]=풀1x10 ·[2]=풀2x1 ·[3]=풀2x10 (풀 1=구슬 상자 · 2=캐릭터 소환) - [x] 풀 1(구슬 상자) 버튼 2줄 제거 (2026-09-20 ·
81bd727) — 골드로 판매 전용 아이템을 뽑는 구조라 sink가 아니다. 자원은 채취로 얻으므로 골드는 캐릭터·장비 뽑기에 쓴다. 예정대로 T-067의 장비 3풀 배선과 한 작업에서 했다 —Draws가 4줄 → 8줄이 됐다. ✅ 서버 테이블은 테스트용으로 남긴다고 답이 왔다 (2026-09-22 · 이슈 #30 종료) —GachaServiceTest가GachaInfoTable1번의 비용 메타를 읽어서 지우면 테스트가 깨진다. 서버 변경 없음
완료 조건
화면에서 골드로 10연차를 뽑아 결과가 순서대로 열리고, 뽑은 캐릭터가 배치 화면 목록에 바로 나타난다.
막고 있는 것 / 선행 일감
- ✅ 없다.
T-026·T-027이 끝나 패킷 모양과 결과 코드가 확정됐고 (이슈 #23), main 병합도 끝났다(cf0a28a) - ⚠️ 연출(🎨)은 막힌 게 아니라 미룬 것이다. 기술적 선행은 없지만, T-026이 보상에 캐릭터를 얹으면 연출이 다뤄야 할 대상이 늘어난다. 먼저 만들면 두 번 만들게 되므로 T-026 뒤로 둔다 — 이 판단은 서버·기획과 공유돼 있다
관련 커밋
53f71d3— 가챠 결과 팝업 추가 (결과 창·등급 색·칸 프리팹 재사용)c69e198— 가챠 결과 팝업 크기·글꼴 다듬기7fc65ea·81bd727— 장비 3풀 배선 · 구슬 풀 제거 (T-067과 한 작업)
참고
Assets/Scripts_Client/폴더 구조.md— 폴더마다<폴더명> 규칙.md가 있다- 희귀도 색상:
GameDesign/Excel/Enum.xlsx(GlobalRarity) — 캐릭터도 같은 축을 쓴다 - 가챠 풀·비용:
GameDesign/Excel/Gacha.xlsx(GachaInfoTable·GachaItemTable·GachaCharacterTable·GachaEquipTable) - 이슈 #30 — 구슬 풀을 화면에서 빼고 서버에는 남길지. 2026-09-22 종료 — 화면에서 빼고 서버 테스트용으로 남긴다
- 캐릭터 30종·등급: 캐릭터 1.2 · 5.1