Seven-Shards-ORIGIN — UI 안정화 스냅샷
1. 주요 변경사항
- UI 프리팹, 로컬라이즈 테이블, TMP 폰트 로딩을
UiRuntimeResources게이트웨이로 모으기 시작했다. 호출부의 직접Resources.Load제거 방향은 좋다. LocalizedTmpText와TMPRuntimeCjkFont추적 갱신으로 locale 변경 시 이미 표시된 TMP 텍스트가 다시 갱신될 수 있는 구조가 생겼다.- 로비 ready/player state 메시지 전송 전에
IsListening과CustomMessagingManagernull을 확인해 shutdown 중 브로드캐스트 예외 가능성을 낮췄다. - UI 3계층 규약, Addressables 전환 체크리스트, DOTween 검증 문서가 추가되어 기술 문서 품질이 뚜렷하게 올라갔다.
2. 코드 품질 리뷰
가장 큰 전진은 산재하던 런타임 로딩 경로를 단일 게이트웨이로 모은 점이다. 이 선택은 이후 Addressables 전환 시 호출부를 다시 갈아엎지 않아도 되므로 방향이 맞다. 다만 UiRuntimeResources가 LocalizedStrings.cs 안에 함께 들어간 것은 좋지 않다. 로컬라이즈 파서, TMP 바인딩 컴포넌트, 리소스 백엔드가 한 파일에 공존하면 변경 이유가 세 갈래로 갈라지고 리뷰 단위도 흐려진다. 최소한 LocalizedTmpText.cs, UiRuntimeResources.cs로 분리하는 편이 낫다.
위험 신호는 Addressables reflection 경로다. 현재 TryLoadViaAddressables는 예외를 모두 삼키고 Resources fallback으로 내려간다. 이 방식은 데모 안정성에는 유리하지만, Addressable key 오타나 catalog 누락을 “그냥 Resources로 로드됨”으로 숨길 수 있다. 또한 handle을 AddressableHandles에 저장하지만 release 경로가 없다. 개선하려면 개발 빌드에서는 실패 로그를 남기고, 성공 handle은 reset 또는 명시적 unload 시 Addressables.Release로 해제해야 한다.
자료구조/복잡도 관점에서는 치명적인 hot path 문제는 보이지 않는다. LobbyReadyMessenger.PruneReadyEntries가 _ready × connectedIds 선형 탐색을 하지만 로비 인원 수가 작고 브로드캐스트 시점에만 실행되므로 지금 당장 병목으로 보기는 어렵다. 다만 참가자 수가 늘어나는 모드로 확장한다면 connectedIds를 임시 HashSet<ulong>으로 바꿔 membership 비용을 고정하는 편이 단순하다.
3. 진행도 평가
이번 변경은 신규 기능보다 안정화와 부채 상환에 가깝다. 로컬라이제이션, UI 리소스 라우팅, 로비 shutdown 예외 방어가 개선되어 플레이 가능한 데모의 신뢰도는 올라갔다. 특히 이전 백로그 일부를 문서와 코드 양쪽에서 닫은 점은 명확한 전진이다.
다만 Addressables는 아직 “준비된 모양”이지 “전환 완료”가 아니다. 실제 패키지 설치, key 등록, 빌드 환경 검증이 없으므로 리소스 체계는 여전히 중간 단계다. 진행도는 66%로 본다. 핵심 플레이가 존재한다는 전제에서는 안정화 국면이지만, 배포 품질까지는 로딩·폰트·스모크 테스트가 더 필요하다.
4. 다음 권장사항
UiRuntimeResources에서 Addressables 실패 로그, fallback 조건, handle release 정책을 먼저 정리해야 한다.- 모든 UI 텍스트 생성 경로를 훑어
LocalizedStrings.T(...)직접 대입이 남아 있으면LocalizedTmpText.Bind로 바꿔야 한다. - JP·SC·TC 전용 TMP SDF를 실제로 추가할지, OS dynamic을 배포 정책으로 허용할지 결정해야 한다.
LocalizedStrings.cs에 합쳐진 세 책임을 파일 단위로 분리해 리뷰 가능성을 높여야 한다.- 로비 종료, locale 전환, UI 리소스 감사 메뉴를 한 번에 도는 수동 스모크 기록을 남겨야 한다.
5. 문서화 상태
design은 4점이다. 이번 변경은 UI/기술 운영 문서 중심이라 게임 컨셉, 코어 루프, 플레이어 경험 목표를 보강하지는 않았다. 설계 의도 문서가 별도로 없다면 신규 팀원이 게임의 재미 구조를 이해하기 어렵다.
technical은 7점이다. UI 3계층 규약, TMP CJK fallback, 리소스 마이그레이션, DOTween 검증 문서는 실무적으로 쓸 수 있다. 다만 네트워킹 권한 모델과 Addressables 실패 정책까지 포함해야 8점 이상으로 볼 수 있다.
spec은 5점이다. 체크리스트와 expected key 목록은 검증에 도움이 되지만, 게임 기능·씬·입력·상태·밸런싱 수치 사양은 아직 _sample/docs 수준과 거리가 있다. 테스트 가능한 기능 사양서로 확장해야 한다.
6. Backlog
- Resources 기반 UI 프리팹·로케일 대량 로딩은 계속 남는다.
UiRuntimeResources는 좋은 중간층이지만com.unity.addressables와 key 등록이 아직 없다. - ja/zh-Hans/zh-Hant 폰트 리스크도 남는다. 전용 SDF를 로드하는 코드와 감사는 생겼지만 실제 자산 추가 근거가 없다.
NetworkMultiplayerLobbyRoot.prefab의 대량 fileID 셔플 이슈는 이번 diff에서 직접 해소되지 않았다. 문서 규약은 생겼지만 기존 프리팹 diff 정리는 별도 작업이다.
7. 이전 Backlog 해결
- GameLocale 변경 시
LocalizedTmpText가 문구를 다시 적용하고TMPRuntimeCjkFont가 추적 TMP에 폰트를 재적용하므로, “캐시만 무효화” 상태는 벗어났다. - UI Bootstrap/Driver/RootRefs 규약은 별도 문서로 승격되었다. 이제 코드 주석이나 에디터 룰에만 의존하지 않는다.
LocalizedStrings는 zh 간 상호 fallback, en, ko 순서와 fallback/missing report를 제공하므로 기존 fallback·누락키 감사 부채는 해소된 것으로 본다.- DOTween은 코드·패키지·문서 검색과 UniTask stale 참조 검증 문서가 추가되어 대체 경로 검증 항목을 닫을 수 있다.