팀스파르타 내일배움캠프

📝 [TIL] 2025-06-04 (수) - ATM UI 시스템 구현

creator2041 2025. 6. 4. 21:04

✅ 오늘 구현한 주요 내용

1. ATM UI 기본 구조 제작

  • PopupBank를 중심으로 메인 ATM UI 제작.
  • 사용자 이름, 보유 현금, 통장 잔액 출력 구성.
  • string.Format("{0:N0}")으로 천 단위 콤마 처리.
  • 타이틀 텍스트는 Bold 설정으로 강조.

2. UserData 클래스 및 Json 저장 방식 구현

  • 유저 정보를 담는 UserData 클래스 작성: 이름, 현금, 잔액.
  • [System.Serializable] 적용으로 Json 직렬화 가능하게 처리.
  • 저장 시 JsonUtility.ToJson(userData) → 파일 저장
  • 로드 시 File.ReadAllText() → JsonUtility.FromJson<UserData>()로 파싱

3. GameManager 싱글톤 구성

  • GameManager.Instance를 통해 전역 접근 가능하게 구성.
  • 내부에 UserData userData 보유 및 초기화.
  • 저장 파일이 존재하지 않으면 기본값(name, 100,000, 50,000)으로 생성.

4. UI 연동 및 실시간 데이터 반영

  • Refresh() 메서드로 UI 값 실시간 업데이트 처리.
  • 금액 변경(입금/출금) 후 Refresh() 호출로 반영.

5. 입출금 UI와 로직 구현

  • 입금/출금 화면 전환 UI Panel 구성 및 버튼 이벤트 연결.
  • 버튼 클릭 시 금액을 매개변수로 전달해 통장/현금 간 이동 처리.
  • InputField를 통한 직접 입력 입출금 구현.
  • 입력값 검증 및 숫자만 입력 가능하도록 제한.

6. 에러 처리 및 팝업 표시

  • 금액 부족 시 PopupError를 통해 사용자에게 알림 표시.
  • 팝업 확인 시 SetActive(false) 처리로 닫기.

7. Json 기반 저장/불러오기 시스템 구현

  • 저장 시:
  •  
    복사편집
    string json = JsonUtility.ToJson(userData); File.WriteAllText(path, json);
  • csharp
  • 불러오기 시:
  • csharp
    복사편집
    string json = File.ReadAllText(path); userData = JsonUtility.FromJson<UserData>(json);
  • 금액이 변경되는 모든 로직에서 자동 저장 적용

🔍 새롭게 알게 된 점

  • Unity의 JsonUtility는 [System.Serializable] 클래스만 직렬화 가능하며, public 필드만 저장됨.
  • Application.persistentDataPath를 이용해 모든 플랫폼에서 안전한 경로에 Json 저장 가능.
  • File.Exists()로 파일 존재 여부 체크 후 초기화 여부 결정 가능.

⚠️ 어려웠던 점 / 해결 방법

문제해결
Json 파일 저장 위치가 헷갈렸음 Application.persistentDataPath 사용으로 고정 경로 확보
금액이 바뀌어도 UI가 갱신되지 않음 데이터 변경 후 Refresh() 호출로 즉시 UI 반영
 

📌 내일 목표

  • 선택 과제인 로그인/회원가입 시스템에 Json 저장 적용
  • 각 유저별로 Json 파일 생성 (ID.json) → 로그인 시 해당 파일 로딩
  • 비밀번호 오류 및 중복 ID 처리 등 예외 처리 구현