Unity/SDK

유니티 Firebase를 활용한 데이터 시스템

홍삼맛 2024. 1. 29. 15:43

기능 소개

  1. 유저 데이터(Firestore)와 인벤토리 데이터(json)가 별개로 작동하여 시스템이 제대로 구축이 안 되어있음
  2. Firestore에 저장되는 데이터는 일일 사용량에 제한이 있어, 추후 출시에 문제가 발생할 수 있음
  3. 그리고 Editor 내에서는 작동되지만 APK 빌드 후 인벤토리 저장에 문제가 발생

⇒ 해당 3가지 트러블을 해결하기 위해 데이터 통합 작업을 진행


기능 구현

Data Save

public void SaveToUserProfile(string fileName = "game_user.dat")
{
    string filePath = $"{Application.persistentDataPath}/{fileName}";
    string json = JsonConvert.SerializeObject(Profile, Formatting.Indented);
    File.WriteAllText(filePath, json);
}
  • Application.persistentDataPath로 해당 플랫폼에 맞는 영구 저장소에 접근할 수 있도록 한다.
  • 저장된 Profile 클래스를 Json 직렬화하여 저장, Formatting.Indented로 가독성을 높임

Data Load

public void LoadFromUserProfile(string fileName = "game_user.dat")
{
    string filePath = $"{Application.persistentDataPath}/{fileName}";
    if (!File.Exists(filePath)) { CreateUserFile(); return; }
    string jsonRaw = File.ReadAllText(filePath);
    Profile = JsonConvert.DeserializeObject<GameUserProfile>(jsonRaw);
}
  • 똑같이 해당 파일 경로에 파일 이름이 있는지 확인, File.Exitst로 파일이 존재하지 않을 경우 파일을 생성
  • Json 데이터를 역직렬화하여 Profile 클래스에 맞게 초기화

게임 저장&불러오기 진행

private void Start()
{
    Manager.Resource.Initialize();
    Manager.Game.Initialize();
    Manager.ObjectPool.Initialize();
    
    Manager.Data.Load();    // 데이터 불러오기
    
    Initialize();
}

private void OnApplicationQuit()
{
    Manager.Data.Save();    // 데이터 저장
}
  • 다른 Manager들이 초기화 되고, 마지막에 데이터를 로드한다. 데이터가 없을 경우 새로 데이터 생성
  • 게임 진행을 멈추고 나갈 경우, 데이터 저장 ⇒ 추후 데이터 저장 추가 (스테이지 클리어, 뽑기)