HANPAN — BlackAndWhite UI/네트워크 스냅샷
1. 주요 변경사항
- BlackAndWhite 게임 UI가 좌측 HUD 중심으로 재배치됐다. 타이머, 내 점수, 히스토리, SELECT 버튼의 위치가 이전보다 명확해졌다.
- 상대 손패를 색상만 보이는 세워진 3D 패로 바꾸고, 제출 시 남은 패를 중앙 정렬하도록 변경했다.
- 라운드 결과를 점수 차 추론이 아니라
RoundResultClientRpc로 전달하는 방향으로 개선했다. 이 결정은 좋다. - 게임 종료 후 Room 복귀 버튼과 준비 상태 초기화가 추가됐다. 다만 책임 위치가 분산되어 후속 정리가 필요하다.
- 보드 잔상 대응을 위해
PendingColor와HasSubmitted적용 순서를 조정했지만, 아직 상태 모델 자체가 취약하다.
2. 코드 품질 리뷰
가장 큰 문제는 BoardLayout3D가 PlayerA/B를 로컬 플레이어 기준으로 다시 매핑하지 않는다는 점이다. 현재 코드는 A 제출은 항상 내 슬롯, B 제출은 항상 상대 슬롯으로 칠한다.
SetColor(_mySlots[idx], TileColorOf(_state.PendingColorA.Value));
SetColor(_oppSlots[idx], TileColorOf(_state.PendingColorB.Value));
이 구조는 A 클라이언트에서는 맞아 보이지만 B 클라이언트에서는 반대로 표시된다. 왜 문제냐면 멀티플레이 UI에서 “내가 낸 패”와 “상대가 낸 패”가 뒤집히면 플레이어가 결과를 신뢰할 수 없고, 이후 버그 리포트도 재현이 어려워진다. 개선은 단순하다. IsLocalA()를 기준으로 A/B 상태를 my/opp 슬롯에 매핑하는 함수를 만들고, 제출 시점과 게임오버 공개 시점 모두 같은 함수를 사용해야 한다.
타이머 추가는 UI 경험 측면에서 전진이지만 현재는 표시용 코루틴이다. 0초가 되어도 서버가 자동 제출, 패널티, 무승부, 라운드 종료 중 어떤 처리도 하지 않는다. 이 상태로 두면 “시간 제한이 있는 게임처럼 보이지만 실제로는 멈출 수 있는 게임”이 된다. 타이머는 서버 권위 상태로 들어가야 하며, 클라이언트 UI는 남은 시간을 표시만 해야 한다.
PendingColor를 HasSubmitted보다 먼저 선언해 적용 순서를 기대하는 방식은 임시 처방이다. 선언 순서 의존은 네트워크 지연, 재접속, 초기 동기화에서 사고 지점이 된다. SubmittedTileState { round, submitted, color } 같은 단일 상태나 서버 RPC 이벤트로 제출 공개를 표현하는 편이 더 견고하다.
3. 진행도 평가
이번 범위는 BlackAndWhite의 플레이 감각을 구체화했다는 점에서 분명한 전진이다. 상대 패 색상 표시, 히스토리, 게임오버 후 Room 복귀는 실제 플레이 테스트에서 바로 체감되는 변화다.
다만 10개 커밋 중 상당수가 UI/동기화 버그 수정이며, 핵심 네트워크 표시 로직에 새 방향성 버그가 들어갔다. 현재 진행도는 약 45%로 본다. “돌아가는 장면”은 생겼지만, 2인 클라이언트 양쪽에서 같은 사실을 일관되게 보여주는 단계에는 아직 도달하지 못했다.
4. 다음 권장사항
- PlayerA/B 고정 보드 표시를 로컬 기준 my/opp 슬롯 매핑으로 수정해야 한다. 이 작업이 최우선이다.
- 선택 타이머를 서버 권위 라운드 제한 시간과 미제출 처리로 연결해야 한다.
PendingColor/HasSubmitted쌍을 단일 제출 상태 구조로 통합해야 한다.- 게임 종료 후 방 복귀와 준비 초기화 흐름을
Room또는SessionManager한쪽 책임으로 정리해야 한다. - 라운드 히스토리에 내 숫자와 상대 숫자가 모두 표시되도록 템플릿과 런타임 바인딩을 맞춰야 한다.
5. 문서화 상태
design 점수는 4점이다. BlackAndWhite의 의도와 심리전 구조는 일부 드러나지만, 플레이어 경험 목표와 UI 정보 공개 원칙이 아직 문서로 고정되지 않았다.
technical 점수는 3점이다. 이번 변경은 네트워크 권한과 상태 동기화가 핵심인데, PlayerA/B 매핑, 라운드 상태, Room 복귀 흐름을 설명하는 기술 문서가 부족하다.
spec 점수는 3점이다. 타이머 60초, 히스토리 표기, 제출 후 공개 범위 같은 값이 코드에 먼저 들어갔다. 테스트 체크리스트로 쓸 수 있는 씬별/UI 상태 사양서가 필요하다.
6. Backlog
- 게임 본편 NetworkObject/Player Prefab 전략은 아직 문서와 코드에서 확정 근거가 부족하다.
PendingColor기본값 Black 문제는 완화됐지만 명시적 미제출 상태가 없어 이월한다.- 수동 leave와 SDK 자동 leave 훅 중복 가능성은 이번 범위에서 검증되지 않았다.
- BlackAndWhite 대형 씬 생성물과 빌더 산출물 관리 문제는 계속 남아 있다.
- Lobby UI의 씬 하드코딩 구조도 아직 개선되지 않았다.
- 레벨/씬별 상세 사양서 부재는 문서화 리스크로 유지한다.
- URP 템플릿 튜토리얼 및 불필요 렌더러 자산 정리도 미해결이다.