1. 개발 목표

  • Firebase Realtime Database를 활용한 유저 데이터 저장/로드 시스템 구현
  • 스탯, 재화 등 게임 데이터의 영구 저장 기능 구현
  • 자동 저장 및 수동 저장 기능 구현

 

2. 주요 구현 내용

2.1 UserDataManager

public class UserDataManager : IManager
{
    // 데이터 모델 구조
    public class UserData
    {
        public string UserId;
        public string Nickname;
        public StatData StatData;
        public CurrencyData CurrencyData;
        // 향후 확장성을 고려한 구조
    }
}

 

- Firebase DB와 연동하여 유저 데이터를 JSON 형태로 저장/로드

  • 각 시스템(스탯, 재화 등)의 데이터를 모듈화하여 관리
  • BigInteger 값을 string으로 변환하여 저장 (Firebase 제약 해결)

 

2.2 자동 저장 시스템

private async Awaitable RunAutoSaveAsync()
{
    while (true)
    {
        await Awaitable.WaitForSecondsAsync(AUTO_SAVE_INTERVAL);
        if (!Managers.Game.IsGamePaused)
        {
            await SaveAllDataAsync();
        }
    }
}

 

- Unity 6의 Awaitable 활용으로 효율적인 비동기 처리

  • 5분 간격 자동 저장
  • 게임 일시정지 상태 고려

 

2.3 데이터 로드 시스템

private void LoadAllSystemData()
{
    // 재화 시스템 데이터 로드
    LoadCurrencyData();
    
    // 스탯 시스템 데이터 로드
    var player = Managers.Character.Player;
    if (player?.TryGetComponent<StatSystem>(out var statSystem) == true)
    {
        LoadStatData(statSystem);
    }
}

 

- 게임 시작 시 Firebase에서 데이터 로드

  • 각 시스템별 데이터 복원
  • 신규 유저와 기존 유저 구분 처리