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에서 데이터 로드
- 각 시스템별 데이터 복원
- 신규 유저와 기존 유저 구분 처리