유니티 Firebase를 활용한 데이터 시스템Unity/SDK2024. 1. 29. 15:43
Table of Contents
기능 소개
- 유저 데이터(Firestore)와 인벤토리 데이터(json)가 별개로 작동하여 시스템이 제대로 구축이 안 되어있음
- Firestore에 저장되는 데이터는 일일 사용량에 제한이 있어, 추후 출시에 문제가 발생할 수 있음
- 그리고 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들이 초기화 되고, 마지막에 데이터를 로드한다. 데이터가 없을 경우 새로 데이터 생성
- 게임 진행을 멈추고 나갈 경우, 데이터 저장 ⇒ 추후 데이터 저장 추가 (스테이지 클리어, 뽑기)
'Unity > SDK' 카테고리의 다른 글
유니티 Firebase 랭킹 시스템 (0) | 2024.02.06 |
---|---|
유니티 FirestoreProperty를 사용한 C# 클래스 매핑 (0) | 2024.01.21 |
유니티 Firestore를 통한 데이터 저장 & 불러오기 (0) | 2024.01.18 |
유니티 Firebase 구글 로그인 구현 (0) | 2024.01.15 |