최종 갱신 (KST)

← 일감 목록
T-052

클라 — 캐릭터 레벨·경험치 푸시 반영과 표시

태웅 New 우선순위 보통 목표 미정 · 🎨 아트만 남음

GitHub 이슈: #25 — 클라 담당(JeongTaeWoong99)에게 할당 (2026-09-13)

배경

T-003에서 서버가 캐릭터 경험치를 실제로 쌓기 시작했다 (2026-09-13). 판정이 정산될 때마다 배치된 캐릭터의 레벨·경험치가 바뀌고, 서버는 바뀐 개체 1건을 S_CharacterSyncResponse(PacketId 21) 로 밀어 준다.

클라는 아직 이 푸시를 받지 않는다. PlayerDataModel._characters는 로그인 때 받은 S_CharacterListResponse 스냅샷 그대로라 서버가 밀어도 화면 레벨은 로그인 시점 값이고, 레벨·경험치를 그리는 UI 자체도 아직 없다 (CharacterInfo.Level·Exp를 읽는 코드가 0곳).

서버가 이미 준 것

것 위치
패킷 S_CharacterSyncResponse { CharacterInfo Character } Assets/Scripts_Server/Protocol/MikaPacket.cs (미러 완료)
Unity 핸들러 · 이벤트 ServerPacketHandler.CharacterSynced Assets/Scripts_Server/Network/MikaNetwork.Unity/ServerPacketHandler.cs
레벨 곡선 테이블 CharacterLevelTable (CharacterLevelTID=레벨 · RequiredExp) Assets/StreamingAssets/Data/CharacterLevelTable.bytes · Scripts_Server/GameData/Tables/

규칙 (→ 캐릭터 5.2)

  • Exp는 현재 레벨에서 쌓은 양이다. 레벨업하면 필요치를 뺀 나머지로 줄어든다 — 증감이 아니라 확정값이라 덮어쓴다.
  • RequiredExp(L) = 레벨 L에 도달하는 데 직전 레벨에서 필요한 양. 진행 바의 분모는 RequiredExp(Level + 1)이다.
  • 만렙 = 테이블의 마지막 행(지금 100). Level + 1 행이 없으면 만렙이다.
  • 한 정산에서 캐릭터 여럿이 바뀌면 패킷도 여럿 온다. 판정이 없거나 만렙이면 오지 않는다.
  • ⚠️ 레벨은 아직 아무 효과도 없다 (속도가 안 바뀐다). 이 일감은 표시까지다.

할 일

  • [x] PlayerDataModel — ServerPacketHandler.CharacterSynced 구독·해제, _characters에서 CharacterId로 찾아 교체한 뒤 CharactersChanged 발행. 목록에 없는 개체가 오면 추가하지 말고 경고만 남긴다 — 목록의 원본은 스냅샷이다 (2026-09-16)
  • [x] 인벤토리 캐릭터 칸에 레벨 표시 → 게이지 오른쪽 아래 배지 LV.19 · 만렙 LV.MAX (2026-09-16. 이름 줄 → 아이콘 모서리 → 게이지 옆으로 옮겼다 — 글자 축소 · 초상화 형태에 따라 붕 뜨는 문제)
  • [x] 경험치 진행 Exp / RequiredExp(Level+1) → 호버(T-050)가 아니라 칸 왼쪽 벽의 세로 게이지로 (2026-09-16 결정) 아이콘과 같은 높이 · 아래→위로 찬다 · 만렙이면 가득. SlotView.prefab에 Exp Gauge(표시 전용 Slider) 추가. RequiredExp는 GameDataLoader.TryGetRequiredExp가 읽는다 — T-050을 기다리지 않게 됐다
  • [x] 플레이 확인 (2026-09-16 사용자 확인) — 배치한 캐릭터의 게이지가 정산마다 차오르고, 레벨업 시 배지 숫자가 오르며 게이지가 줄어드는지 · 칸이 프레임을 빈틈 없이 채우는지 · 재로그인해도 같은지
  • [ ] 🎨 레벨업 연출 (칸 반짝임·토스트) — 뒤로. PlayerDataModel.OnCharacterSynced에 TODO 자리를 표시해 뒀다

완료 조건

슬롯에 배치한 캐릭터를 두고 기다리면 재로그인 없이 인벤토리 칸의 레벨이 오르고, 칸의 세로 게이지에서 경험치가 차오르는 것이 보인다. 재로그인해도 같은 값이다.

막고 있는 것 / 선행 일감

  • 없음 — 패킷·이벤트·테이블이 전부 들어와 있다. 서버 구현은 87d0243으로 main에 있다
  • T-050(호버 UI)이 먼저 서면 경험치 진행은 거기에 얹는다 → 칸 안 게이지로 결정해 T-050과 무관해졌다

관련 커밋

  • 5b8939e — 경험치 곡선 데이터(ExpPerJudge · CharacterLevelTable)
  • 0a2d2c5 — 인벤토리 캐릭터 칸 레벨 배지 · 경험치 게이지 · 칸이 프레임을 채움

참고

  • T-003 — 서버 쪽 구현 내역
  • Assets/Scripts_Client/Managers/PlayerDataModel.cs — OnCharacterListReceived가 스냅샷을 넣는 자리
  • Assets/Scripts_Client/UI/Inventory/InventoryGridPresenter/CharacterSlotSource.cs — 캐릭터 칸 데이터 소스