프로젝트 일지/Unity

[Unity/TIL] Firebase 연동

톰마토 2025. 4. 29. 21:03

파이어베이스의 Realtime Database를 연동해서 Load / Save 테스트를 완료했다. 우선 연동된 것 확인까지만 하고, 이번주는 중간 발표를 준비하기로 했다.

 

파이어베이스 Realtime Database 연동

아래 두 링크를 참고했다. 

1. 파이어베이스에서 프로젝트 생성하고, SDK를 유니티 프로젝트에 임포트하는 과정까지는 아래 블로그를 참고했다. 

https://learn-and-give.tistory.com/118

 

[백문이 불여일타] Unity용 Firebase 실시간 데이터베이스 시작하기

NodeJS 기반으로 이것 저것 해보려고 알아보던 중, Unity 기반으로 멀티플레이로 뭔가 검토 해 볼 것이 있어 Firebase 기반의 Unity 연동에 대해 알아보고자 합니다. 일단은 Firebase에서 제공되는 튜토리

learn-and-give.tistory.com

2. 이후 실질적으로 사용할 때는 아래 외국형님 링크를 참고해서 만들었다!

https://www.youtube.com/watch?v=hAa5exkTsKI

 

따라하면서 조금 신경써줘야 됐던 부분들

  • google-services.json 을 새로 바꾸기 
    파이어베이스 프로젝트 잘 만들고 나면 google-services.json 파일에 firebase_url이 추가된다. 다운받아서 원래 있던 파일을 대체해도 되고 firebase_url만 복붙해도 된다.

 

  • google-services.json  파일이 Assets/StreamingAssets 에 있어야 함. 

 

Realtime Database에서 Load / Save 

LoadFirebase에서는 데이터 로드가 된 후에 실행할 수 있는 Action을 제공한다. 로드된 시점(?)을 제공하는 것이다.

/// <summary>
/// 파이어베이스에 저장 (쓰기)
/// </summary>
/// <typeparam name="T">저장할 데이터 타입</typeparam>
/// <param name="data">저장할 데이터</param>
public void SaveFirebase<T>(T data)
{
    string json = JsonConvert.SerializeObject(data);
    _databaseReference.Child("users").Child(userID).Child(typeof(T).Name).SetRawJsonValueAsync(json);
}

/// <summary>
/// 파이어베이스에서 로드 (읽기)
/// </summary>
/// <typeparam name="T">읽어올 데이터 타입</typeparam>
/// <param name="onComplete">로드완료 후 실행할 Action</param>
public void LoadFirebase<T>(Action<T> onComplete)
{
    Managers.StartCoroutine(WaitingData<T>(result =>
    {
        onComplete(result);
    }));
}

private IEnumerator WaitingData<T>(Action<T> onComplete)
{
    var firebaseData = _databaseReference.Child("users").Child(userID).Child(typeof(T).Name).GetValueAsync();
    yield return new WaitUntil(() => firebaseData.IsCompleted);

    Util.Log("Process is Complete");

    DataSnapshot snapshot = firebaseData.Result;
    string jsonData = snapshot.GetRawJsonValue();

    if(jsonData != null)
    {
        T result = JsonConvert.DeserializeObject<T>(jsonData);
        onComplete.Invoke(result);
        Util.Log("Firebase's Data 잘 불러옴");
    }
    else
    {
        Util.Log("Firebase's Data Not Found");
    }
}

 

사용 방법을 팀 노션에 문서로 정리해두었다.

테스트 완