배경
상자는 "쌓아 뒀다가 한꺼번에 까는 맛"이 전부다.
서버(T-029)가 개봉 결과를 가챠와 같은 모양(GachaRewardInfo)으로 내려주므로,
연출 코드를 두 벌 만들지 않고 T-031의 결과 연출을 재사용한다.
할 일
⏸ = 서버 패킷이 먼저 와야 한다 · 🎨 = 연출·리소스. 의도적 후순위
✅ 기능은 다 섰다 (2026-09-20 ·
7fc65ea). 남은 것은 🎨 연출과 "상자가 쌓였다는 알림 표현" 하나뿐이다. ✅ 개봉 패킷이 섰다 (2026-09-19) —C_ItemUseRequest { ItemTID, Count(1~Constants.BoxOpenMax = 50) }→S_ItemUseResponse { Result, ItemTID, Rewards(GachaRewardInfo), ItemChangeInfos }. 상자는 나무·은·황금 × 산업 Lv1~5 = 15종100019~100033(아이템 · 최대 50 · 2026-10-01 개편, 옛100007~100009는 결번 · #49). 보상 종류에 골드(EGachaRewardType.Gold,Count가 금액)가 새로 있다 — 골드는S_CurrencyResponse, 장비는S_EquipSyncResponse로 따로 온다. 결과 코드:NotEnoughItem·ItemNotUsable·InvalidUseCount. 공유하기로 한 연출(T-031)은 여전히 뒤로 미뤄 둔 상태다. 묶음의 마지막 칸이다 — 순서대로 T-029 → T-031 연출 → 여기.
- [x] 인벤토리에서 상자 사용 (2026-09-20) — 자원 칸 좌클릭이다. 우클릭은 판매 담기가 쓰고 있어
한 조작에 두 뜻을 겹치지 않았다. 수량은 판매 담기와 같은 팝업(
UIManager.AskAmount)을 쓰고, 1개면 묻지 않는다. 무엇이 상자인가는GameDataLoader.IsBox(=ItemTable.OpenGachaId)가 가른다 - [ ] 🎨 개봉 연출. T-031의 결과 연출을 공유한다. 상자 전용으로 새로 만들지 않는다 → T-031의 순차 연출을 의도적으로 뒤로 미뤄 둔 상태라 공유할 물건이 아직 없다. 여기서 따로 만들지 않는다 — 두 벌이 되는 순간 한쪽만 고쳐진다
- [x] 대량 개봉 요약 경로 (2026-09-20) — 결과를 종류별로 합쳐 보여 준다(칸 수 = 종류 수). 가챠 결과 팝업을 그대로 쓰되 상자 경로만 합친다 — 가챠는 순차 공개 연출이 들어올 자리라 낱개를 유지했다. 묶음 열쇠는 보상 종류 + TID다(아이템 1001과 장비 1001은 다른 물건이다)
- [x] 개봉 후 인벤토리 갱신 (2026-09-20) —
S_ItemUseResponse.ItemChangeInfos를PlayerDataModel이 반영한다. 골드는S_CurrencyResponse, 장비는S_EquipSyncResponse로 따로 오므로 여기서 건드리지 않는다. 결과 코드 문구ItemNotUsable·InvalidUseCount도ResultMessages에 넣었다 - [ ] 상자가 쌓였다는 것을 재촉하지 않고 알리는 표현을 고른다 (⚠️ 위젯 배지·타이머·"오늘까지"는 P3에서 금지다) → 지금은 자원 탭에 칸으로 보이는 것이 전부다. 그것으로 충분한지 정한다. T-071(백그라운드 알림)과 같은 결정 축이다
완료 조건
인벤토리에서 상자를 전부 까면 결과가 요약으로 보이고 아이템이 들어온다. 연출 로직이 가챠 화면과 하나의 코드다.
✅ 2026-09-20 사용자 플레이 확인 통과. 좌클릭 → 수량 → 종류별 합산 결과 · 골드 반영 · 상자 차감까지 확인했다.
막고 있는 것 / 선행 일감
T-029— 개봉 패킷. 이것이 진짜 게이트다 — 오면 기능 항목 넷이 함께 열린다T-031— 결과 연출을 공유하므로 먼저 있어야 한다. ⚠️ 다만 T-031 연출은 막힌 게 아니라 미뤄 둔 것이다(🎨) — 이 일감의 연출 항목도 같이 뒤로 간다
관련 커밋
7fc65ea— 상자 개봉(좌클릭 · 결과 종류별 합산 ·S_ItemUseResponse핸들러 신설)
참고
- 게임기획코어 1장 — P1 · P3
Assets/Scripts_Client/폴더 구조.md