최종 갱신 (KST)

← 일감 목록
T-042

클라 — 재화 패킷 구조 변경 대응 (S_CurrencyResponse가 리스트에서 필드로 바뀌었다)

태웅 Closed 우선순위 높음 목표 미정 · 보관됨

GitHub 이슈: #20

배경

✅ 끝났다 (2026-09-02). 컴파일 에러 3건이 0이 됐고, 상태바에 다이아 칸까지 붙였다.

⚠️ (당시) 이 일감을 하기 전까지 Unity 프로젝트는 컴파일되지 않았다.

서버에서 재화 구조를 행(row) 축에서 컬럼(column) 축으로 바꿨다. 재화가 늘면 종류 행을 추가하는 게 아니라 컬럼·필드를 추가하는 구조다. 같이 유료 재화 Dia가 추가됐다.

이전 이후
DB t_user_currency (user_id, currency_type, amount) t_user_currency (user_id PK, gold, dia)
패킷 S_CurrencyResponse { List<CurrencyInfo> Currencies } S_CurrencyResponse { long Gold; long Dia }
DTO CurrencyInfo { byte CurrencyType; long Amount } 삭제됨

프로토콜 미러(Assets/Scripts_Server/Protocol/)는 서버 빌드가 이미 갱신했다. 클라 코드만 옛 모양(res.Currencies · CurrencyInfo)에 맞춰져 있어 깨진다.

서버 쪽에서 클라 코드까지 고쳤다가, 담당 폴더가 아니라 되돌렸다 (CLAUDE.md 협업 규칙 — "각자 자기 담당 폴더만 수정한다").

할 일

  • [x] Assets/Scripts_Server/Network/MikaNetwork.Unity/ServerPacketHandler.cs — Handle_S_CurrencyResponse가 res.Currencies를 순회하지 않도록 고친다. 로그는 Gold·Dia 두 값을 찍으면 된다. 이벤트(CurrencyReceived) 이름은 그대로 써도 된다.
  • [x] Assets/Scripts_Client/Managers/PlayerDataModel.cs — Dictionary<byte, long> _currencies와 GetCurrency(byte)를 걷어내고 Gold·Dia 프로퍼티로 바꾼다. GameData.CurrencyType 참조도 함께 사라진다.
  • [x] 문서 갱신 — Assets/Scripts_Client/패킷 레퍼런스.md(로그인 수신 세트의 패킷 모양), Assets/Scripts_Client/서버 동작 이해.md(총량/델타 표의 S_CurrencyResponse 행)
  • [x] (선택) Dia 표시 — 붙이기로 결정했다. 상태바(State Presenter)에 Dia Panel을 넣었다. ⏸ 값은 늘 0이지만 자리를 먼저 잡아 두는 쪽을 택했다. 위젯(상단바 지갑)에는 넣지 않았다

완료 조건

  • Unity 에디터에서 컴파일 에러가 없다.
  • 로그인하면 PlayerDataModel.Gold·Dia에 서버가 보낸 잔액이 들어오고 CurrencyChanged가 발행돼 위젯·상태바의 골드 숫자가 갱신된다.

참고

막고 있는 것 / 선행 일감

  • 없음 (서버 변경은 이미 들어왔다)

착수하고 나서 드러난 것 (2026-09-02)

상태바를 아이콘 + 텍스트 짝으로 함께 바꿨다. 다이아를 넣으면 숫자만 셋이 나열돼 무엇이 무엇인지 구분되지 않는다. Nick·Gold·Dia를 각각 Xxx Panel(정렬 상자)로 싸고 그 안에 Xxx Image(아이콘)와 기존 텍스트를 넣었다.

  • 바깥 비율 3 : 2 : 2 : 1×5는 그대로다 — FlexibleWidth를 텍스트에서 패널로 옮겼다.
  • 텍스트를 새로 만들지 않고 옮겼다. StatePresenter의 참조는 오브젝트 참조라 부모가 바뀌어도 살아남는다 — 재배선이 필요 없었다.
  • 아이콘은 아트가 없어 색만 있는 자리표시자다(내장 Knob + 짝이 되는 글자색). 상세는 State 규칙.md.

⚠️ GameData.CurrencyType이 쓰이지 않게 됐다. Assets/Scripts_Server/GameData/Enum.cs는 서버에서 복사되는 미러라 손대지 않았다. Dia도 이 enum에 없다 — 정리 여부는 서버 판단이다.

⚠️ 아이콘 폭에 33을 적었다가 걷어냈다 (같은 날 수정). 파생값이라 가운데 높이·비율이 바뀌면 정사각형이 깨진다. Common/ugui-layout/SquareLayoutElement로 교체했고, Layout 규칙.md에 "파생값을 숫자로 베끼지 않는다" 절을 신설했다.