✅ 완료 (2026-09-02). 전환 구조가 서고 자원 · 캐릭터 두 탭이 실제로 돈다. 남은 두 탭(장비 · 특성)은 선행이 풀리지 않아 T-043로 옮겼고, 칸 이동은 T-044로 세웠다.
배경
창고에 탭 버튼 4개가 있지만 눌러도 아무것도 바뀌지 않았다.
StorageTabPresenter는 버튼을 잡아 두고 "화면이 없다"를 로그로 남기는 것까지였고
(OnTabClicked → ClientLogger.Warn), 실재하는 것은 자원 탭 하나뿐이었다.
InventoryPresenter 하나가 아이템 전부를 한 칸에 쏟아냈다.
막힌 것은 탭 전환이 아니라 탭에 담을 내용이었다.
착수하고 나서 드러난 것 — 막고 있던 것은 절반만 사실이었다
이 일감은 원래 캐릭터 탭도 T-026(가챠) 대기로 적혀 있었다. 실제로 확인해 보니 아니었다.
| 탭 | 데이터 | 실제 판정 |
|---|---|---|
| 자원 | S_InventoryResponse(로그인 1회) + S_UpdateItemResponse(변경분) |
있다 |
| 캐릭터 | S_CharacterListResponse(로그인 1회) → PlayerDataModel.Characters |
있었다. 증분 패킷이 없지만 캐릭터가 늘어날 경로 자체가 없어(가챠는 아이템 전용) 스냅샷으로 충분하다 |
| 장비 | 없음 | 못 만든다. 게다가 ItemTableRow.ItemType은 산업 축이라 장비를 담을 칸이 테이블에 없다 |
| 특성 | 없음 | 서버 미구현 |
"T-026이 와야 캐릭터 탭을 만든다"는 여러 종으로 목록·필터를 실검증할 수 없다는 뜻이었지, 화면을 못 만든다는 뜻이 아니었다. 1종이어도 그려진다.
한 일
- [x] 탭 전환 seam —
StorageTabenum +TabEntry(탭 ↔ 버튼) 배선.UIManager.mainScreens와 같은 패턴이고ValidateTabs가 배선을 Start에서 검증한다 - [x] 격자 하나 + 탭별 공급자로 구조 전환 —
InventoryPresenter→StorageGridPresenter. 탭마다 격자를 두지 않는다(셋의 레이아웃이 같아 세 벌이면 한쪽만 고쳐진다) - [x] 자원 탭 — 기존 인벤토리를
ResourceSlotSource로 옮겨 격자에 얹었다. 기본 탭이다 - [x] 캐릭터 탭 —
CharacterSlotSource. 이름 + 배치 중 / 배치 가능을 보여 준다 - [x] 장비·특성 탭은 버튼을 잠갔다 — 잠금은
StorageGridPresenter.HasSource에서 파생된다 (탭 줄이 따로 적지 않는다. 공급자가 생기면 저절로 열린다) - [x] 씬·프리팹 —
Grid Presenter (↓ SUB VIEW)개명 · 칸 프리팹Count Text→Sub Text
함께 고친 것 — 정렬을 구조적으로 막고 있던 자리
옛 InventoryPresenter는 ItemId → 프레임을 고정 매핑하고 빈 프레임을 앞에서부터 찾았다.
아이템이 처음 들어온 순서로 칸이 영구히 고정돼 정렬을 넣을 자리가 없었다.
→ i번째 항목 → i번째 프레임 으로 바꿨다. 순서의 주인이 공급자로 옮겨가
정렬·걸러 내기는 공급자만 고치면 되고 격자는 그대로다(T-015).
칸을 Destroy하던 것도 Clear() + 풀 반환으로 바꿨다 — InventorySlotView의 주석은
이미 "파괴하지 않고 재사용"이라고 말하는데 코드가 그렇지 않았다.
완료 조건
탭을 누르면 그 탭의 목록만 보이고, 새 탭을 추가할 때 켜고 끄는 코드를 한 곳만 고치면 된다. ✅
⚠️ 네 탭이 다 차야 끝나는 일감이 아니었다. seam이 서고 자원 탭이 그 위에 얹히면 구조적 몫은 끝난다 — 나머지는 선행이 풀리는 대로 얹는다. 실제로는 캐릭터 탭까지 얹혀서 예상보다 한 칸 더 나갔다.
남은 것 (새 일감으로 옮겼다)
관련 커밋
- 미커밋 (작업 트리)
참고
Assets/Scripts_Client/UI/Storage/Storage 규칙.md— "탭 하나를 채우는 절차" 가 여기 있다Assets/Scripts_Client/UI/Storage/StorageGridPresenter/— 격자 · 공급자Assets/Scripts_Client/UI/Storage/StorageTabPresenter/StorageTabPresenter.cs—StorageTabenum- 분류 기준 컬럼:
GameDesign/Excel/Item.xlsx