빌덱 프로젝트, 네트워크 연결 및 UI 피드백 개선에 집중!

오늘은 네트워크 연결 흐름을 명확히 하고, 사용자 인터페이스(UI)를 통해 게임 상태를 더 직관적으로 파악할 수 있도록 개선하는 데 중점을 두었습니다. 특히 씬 전환 과정에서의 문제점들을 해결하고, 버튼의 시각적 피드백을 강화했습니다.

🛠️ 오늘 구현 및 해결한 주요 내용

  1. 네트워크 연결 UI 가시성 제어:
    • 문제: 게임 시작 시 호스트/클라이언트/서버 버튼과 게임 플레이 UI(트래시/스톱 버튼)가 모두 보이거나, 연결 후에도 불필요한 버튼이 남아있었습니다.
    • 해결: NetworkManagerUI.cs를 수정하여 연결 전에는 호스트/클라이언트/서버 버튼만 보이게 하고, 연결이 성공하면 이 버튼들을 숨기고 게임 플레이 UI를 표시하도록 구현했습니다.
    • NetworkManagerUI 스크립트에 buttonsPanelgameUIPanel 필드를 추가하여 Inspector에서 각 UI 그룹을 할당할 수 있도록 했습니다.
  2. “트래시 앤 리필” 버튼 시각적 피드백 강화:
    • 문제: “트래시 앤 리필” 버튼이 턴당 한 번만 사용 가능하도록 기능적으로 제한되어 있었지만, 사용 후에도 시각적인 변화가 없어 플레이어가 사용 여부를 직관적으로 알기 어려웠습니다. 또한 상대방의 턴일 때도 버튼이 활성화된 것처럼 보였습니다.
    • 해결:
      • GameUI.cstrashAndRefillNormalSpritetrashAndRefillUsedSprite 필드를 추가하여 버튼의 상태에 따라 스프라이트가 변경되도록 구현했습니다.
      • GameManager.csRequestTrashAndRefillServerRpc 메서드에서 hasUsedTrashAndRefill.Value가 변경된 후 gameUI.UpdateButtonStates()를 호출하여 UI가 즉시 업데이트되도록 했습니다.
      • GameUI.UpdateButtonStates()에서 currentPlayer.IsOwner를 확인하는 로직을 추가하여, 현재 턴 플레이어가 로컬 플레이어일 때만 버튼이 활성화되고 정상 스프라이트를 표시하도록 수정했습니다. 이를 통해 상대방의 턴일 때는 버튼이 비활성화된 상태로 표시됩니다.
  3. 씬 전환 및 네트워크 오브젝트 지속성 디버깅 (이전 시도 복구 후 재정비):
    • 문제: 이전 씬 분리 시도 과정에서 NullReferenceException, [Invalid Destroy] 등 다양한 오류가 발생했으며, 씬 전환 후 게임 요소들이 제대로 보이지 않는 문제가 있었습니다. 사용자의 요청에 따라 이전 상태로 프로젝트를 복구한 후, 핵심적인 문제들을 재진단했습니다.
    • 해결:
      • NetworkManagerUI.Awake()에서 발생하던 NullReferenceExceptionNetworkManager.Singleton 접근 타이밍 문제로 진단, 이벤트 구독 로직을 Awake()에서 Start() 메서드로 이동하여 해결했습니다.
      • PlayerPrefab(Clone)과 관련된 [Invalid Destroy] 오류는 플레이어 오브젝트가 씬 전환 시 파괴되는 문제로 진단, Player.csAwake() 메서드에 DontDestroyOnLoad(gameObject);를 추가하여 플레이어 오브젝트가 씬 전환 시에도 유지되도록 했습니다.
      • GameManager.csGameUI.cs에 상세한 Debug.Log를 추가하여 코드 실행 흐름과 변수 상태를 추적하며 문제의 원인을 파악했습니다.
  4. 필드 덱 카드 간격 조정 안내:
    • 문제: 필드 덱 카드들의 간격이 너무 넓어 보인다는 피드백이 있었습니다.
    • 해결: FieldDeckDisplay.cscardSpacing 변수를 Inspector에서 직접 조정하여 카드 간격을 조절할 수 있음을 안내했습니다.
  5. “스왑 카드” 버튼 제거 확인:
    • 문제: UI에 “스왑 카드” 버튼이 있었으나, 실제 로직은 카드 선택만으로 스왑이 이루어져 버튼의 필요성이 불분명했습니다.
    • 해결: GameUI.cs 코드 검토 결과, 해당 버튼의 OnClick() 이벤트가 비어있음을 확인하고, 버튼이 중복이며 안전하게 제거할 수 있음을 확인했습니다.

🚀 다음 목표

오늘의 작업으로 게임의 기본 UI 흐름과 피드백이 크게 개선되었습니다. 다음 단계에서는 게임의 핵심적인 기능 구현에 다시 집중할 수 있습니다.

  • 점수판 기능 구현: 게임 종료 시 승자의 점수 및 순위를 명확하게 표시하는 기능을 구현합니다.
  • 추가 시각 효과: 카드 뽑기/버리기 등 게임 플레이의 중요한 순간에 시각적 효과(파티클 등)를 추가하여 사용자 경험을 향상시킵니다.

오늘도 많은 문제들을 해결하며 프로젝트가 한 단계 더 발전했습니다.