[빌덱 개발 일지] 2025년 7월 4일 - 네트워크 동기화 및 UI/UX 개선, 핵심 기능 안정화!
빌덱 프로젝트, 네트워크 동기화 및 UI/UX 개선으로 안정화!
오늘은 지난 세션에서 발생했던 여러 네트워크 동기화 및 UI/UX 관련 문제들을 해결하고, 핵심 게임 기능을 더욱 안정화하는 데 집중했습니다.
🛠️ 오늘 구현 및 해결한 주요 내용
- 클라이언트 카드 표시 문제 해결:
- 카드 교환 후 클라이언트 핸드에 카드가 즉시 보이지 않던 문제를
Player.cs
의OnHandNetworkIdsChanged
에서 코루틴을 사용하여 화면 갱신을 지연시켜 해결했습니다. GameManager.cs
에서 불필요한UpdateAllDisplaysClientRpc
호출을 제거하여 데이터 동기화와 화면 갱신 간의 경합 상태를 해소했습니다.
- 카드 교환 후 클라이언트 핸드에 카드가 즉시 보이지 않던 문제를
- 카드 선택 시 시각적 피드백 동기화:
- 클라이언트에서 카드를 선택했을 때 시각적 피드백(Y축 이동)이 없던 문제를
Card.cs
에isSelected
NetworkVariable
을 추가하여 해결했습니다. 이제 카드의 선택 상태가 네트워크로 동기화되어 모든 클라이언트에서 올바르게 표시됩니다. GameManager.cs
의HandleCardSelection
로직을isSelected
NetworkVariable
을 사용하도록 수정했습니다.
- 클라이언트에서 카드를 선택했을 때 시각적 피드백(Y축 이동)이 없던 문제를
- 카드 위치 버그 수정:
- 카드가 핸드와 필드 덱 사이를 이동할 때 선택 효과의 기준 위치가 잘못되던 문제를
CardDisplay.cs
에_wasSelected
플래그와ResetSelectionState()
메서드를 추가하여 해결했습니다. 카드의 부모가 바뀔 때마다 선택 상태를 초기화하여 올바른 위치에서 효과가 적용되도록 했습니다.
- 카드가 핸드와 필드 덱 사이를 이동할 때 선택 효과의 기준 위치가 잘못되던 문제를
- 호스트의 턴 무시 개입 문제 해결:
- 호스트가 클라이언트의 턴에 필드 카드를 선택할 수 있던 심각한 버그를
Card.cs
에서OnMouseDown
을 제거하고,CardDisplay.cs
에서NetworkManager.Singleton.LocalClient.PlayerObject
를 통해 로컬 플레이어를 정확히 찾아ServerRpc
를 호출하도록 수정하여 해결했습니다. 이로써 모든 카드 선택 요청은 서버의 턴 확인 로직을 거치게 됩니다.
- 호스트가 클라이언트의 턴에 필드 카드를 선택할 수 있던 심각한 버그를
- 버튼 권한 문제 해결 (Trash/Refill, Stop):
- 호스트가 턴을 무시하고 버튼을 누르거나, 클라이언트가 버튼을 누를 수 없던 문제를 해결했습니다.
GameManager.cs
에RequestTrashAndRefillServerRpc
와RequestDeclareStopServerRpc
를 추가하고, 이ServerRpc
내에서 요청 플레이어의 턴을 엄격하게 확인하도록 했습니다.GameUI.cs
에서 버튼 클릭 시 이ServerRpc
들을 호출하도록 변경했습니다.
- 턴당 필드 덱 리필 횟수 제한 구현:
- “필드 패 다시 깔기” 버튼을 턴당 한 번만 사용할 수 있도록
Player.cs
에hasUsedTrashAndRefill
NetworkVariable
을 추가했습니다. GameManager.cs
에서 턴이 넘어갈 때 이 변수를 초기화하고,RequestTrashAndRefillServerRpc
에서 사용 여부를 확인하여 제한했습니다.GameUI.cs
에서hasUsedTrashAndRefill
값에 따라 버튼의 활성화 상태를 업데이트하도록 했습니다.
- “필드 패 다시 깔기” 버튼을 턴당 한 번만 사용할 수 있도록
- 죽은 카드 더미 및 메인 덱 시각화 (진행 중):
GameManager.cs
에deckCount
와discardPileCount
NetworkVariable
을 추가하고, 관련 로직에서 이 값들을 업데이트하도록 했습니다.DeckPileDisplay.cs
스크립트를 생성하여 메인 덱과 죽은 카드 더미의 시각적 표현을 담당하도록 했습니다.- 오류 해결:
InvalidOperationException
및 투명 카드 문제 발생. 이는NetworkObject
가 없는 시각용 프리팹을 사용해야 함을 확인하고,CardBackVisual
이라는 별도의 시각용 프리팹을 생성하여DeckPileDisplay.cs
와OpponentHandDisplay.cs
에서 사용하도록 수정했습니다.
- 상대방 핸드 카드 시각화 (진행 중):
Player.cs
에handCardCount
NetworkVariable
을 추가하여 핸드 카드 개수를 동기화하도록 했습니다.OpponentHandDisplay.cs
스크립트를 생성하여 상대방의 핸드 카드를 뒷면으로 표시하도록 했습니다.- 오류 해결:
OpponentHandDisplay.cs
의 문법 오류(닫는 중괄호 누락)를 수정하여 Inspector에 필드가 나타나지 않던 문제를 해결했습니다.
🚀 다음 목표
현재까지 구현된 시각화 기능(죽은 카드 더미, 메인 덱, 상대방 핸드)의 최종 확인 및 안정화가 필요합니다. 이후 기획서에 명시된 다른 기능들(예: 점수판, 항복 기능 등)을 순차적으로 구현해 나갈 예정입니다.
오늘도 많은 문제들을 해결하며 프로젝트가 한 단계 더 발전했습니다. 앞으로도 많은 기대 부탁드립니다!