본문 바로가기
유니티

Day 60 - Firebase를 활용해 사용자 게임 데이터 저장

by shin0707 2024. 12. 19.
728x90

 

  • 주제

>>  Firebase 설정 및 Unity 연동

>>  게임 데이터 클래스 정의

>>  Firestore에 데이터 저장

>>  저장 프로세스 연결


  • 공부내용

이번 게시글에서는 Google 로그인 시스템을 통해 인증된 사용자 정보를 기반으로 Firebase의 Cloud Firestore에 게임 데이터를 저장하는 방법을 설명한다. 이를 통해 게임 데이터를 안전하게 클라우드에 보관하고, 언제든 불러올 수 있다.

 

1. Firebase 설정 및 Unity 연동

 

  • Firebase 프로젝트 생성:
    Firebase 콘솔에서 새 프로젝트를 생성한 후, Firestore 데이터베이스를 활성화한다.
  • Firebase SDK 추가:
    Unity 프로젝트에 Firebase Unity SDK를 다운로드하여 추가한다. Firebase Authentication과 Firestore를 사용하므로 관련 패키지를 설치한다.
  • Firebase 초기화:
    Firebase를 Unity에 초기화한다.
using Firebase;
using Firebase.Auth;
using Firebase.Firestore;
using UnityEngine;

public class FirebaseManager : MonoBehaviour
{
    public static FirebaseManager Instance;
    public FirebaseAuth Auth;
    public FirebaseUser User;
    public FirebaseFirestore Firestore;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }

        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
        {
            if (task.Result == DependencyStatus.Available)
            {
                Auth = FirebaseAuth.DefaultInstance;
                Firestore = FirebaseFirestore.DefaultInstance;
                Debug.Log("Firebase 초기화 완료");
            }
            else
            {
                Debug.LogError("Firebase 초기화 실패: " + task.Result);
            }
        });
    }
}

 


 

2. 게임 데이터 클래스 정의

게임 상태 데이터를 저장할 클래스를 정의한다. 기존의 데이터를 새로운 형식으로 변환해 사용한다.

[System.Serializable]
public class GameData
{
    public string CurrentLevel;
    public int StageNumber;
    public int CollectedItems;
    public int TotalScore;
    public int Coins;
    public bool IsCompleted;

    public GameData(string currentLevel, int stageNumber, int collectedItems, int totalScore, int coins, bool isCompleted)
    {
        CurrentLevel = currentLevel;
        StageNumber = stageNumber;
        CollectedItems = collectedItems;
        TotalScore = totalScore;
        Coins = coins;
        IsCompleted = isCompleted;
    }
}

 

3. Firestore에 데이터 저장

public class DataManager : MonoBehaviour
{
    public void SaveGameData(string userId, GameData data)
    {
        FirebaseManager.Instance.Firestore
            .Collection("Users")
            .Document(userId)
            .SetAsync(data)
            .ContinueWith(task =>
            {
                if (task.IsCompleted)
                {
                    Debug.Log("게임 데이터 저장 완료");
                }
                else
                {
                    Debug.LogError("게임 데이터 저장 실패: " + task.Exception);
                }
            });
    }
}

 


 

4. 저장 프로세스 연결

게임 상태를 저장할 때 위 메서드를 호출한다.

public class GameController : MonoBehaviour
{
    public void SaveGame()
    {
        string userId = FirebaseManager.Instance.User.UserId;
        GameData data = new GameData("Forest", 5, 12, 3000, 150, false);
        DataManager.Instance.SaveGameData(userId, data);
    }
}
728x90
반응형