파파비의 블로그

Unity, 유니티 - Firestore에서 data 가져오기 본문

기타

Unity, 유니티 - Firestore에서 data 가져오기

N. Dave 2020. 10. 8. 16:35
반응형

검색해보니 Firestore 관련 코드가 제대로 설명된게 없어서

정리해서 올려보고자 한다.

 

먼저

Unity에서 Firestore를 사용하기 위해선

1) Firebase project와 연결이 되어 있어야하고

2) Unity Project에 firestore sdk를 넣어두어야 한다.

위 2개의 과정은 다른 곳에서 찾아보면 참으로 많아 생략하고 핵심만 얘기하고자 한다.

 

 

코드

using System.Collections.Generic;
using UnityEngine;
using Firebase.Firestore;

public class Playlist : MonoBehaviour
{
    // Start is called before the first frame update
    async void Start () 
    {
        FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
        CollectionReference playlistref = db.Collection("playlist");
        QuerySnapshot snapshot = await playlistref.GetSnapshotAsync();

        foreach (DocumentSnapshot document in snapshot.Documents)
        {
            Dictionary<string, object> documentDictionary = document.ToDictionary();
            Debug.Log("title:  " + documentDictionary["title"] as string);
            if (documentDictionary.ContainsKey("description"))
            {
                Debug.Log("link: " + documentDictionary["link"] as string);
            }
            Debug.Log("available: " + documentDictionary["available"] as string);
            Debug.Log("time: " + documentDictionary["time"] as string);
        }
    }
}

여기에 모든 핵심이 다 들어 있다.

 

1. 먼저 firebase firestore 객체에 연결을 해야 한다.

>> 인터넷에 찾아보니 firebaseDB, firebase.firestore. ~ 뭐 이런식으로 firestore객체를 받으라고 하는데

 

2020년 10월 기준으로 했을 땐,

다 저런 것들은 없었고,

 

FirebaseFirestore 이라는 객체를 통해 가져올 수 있었다.

>> FirebaseFirestore 객체는, unity 프로젝트내에 연결된 firebase 프로젝트의 firestore 관련 객체로 연결된다.

 

 

2. db.collection("컬렉션이름") 은 firestore 내에 컬렉션을 가져오게 되는데,

컬렉션이름은 여기 위에 보이는 것처럼, 컬렉션 시작 부분 아래에 있는 녀석의 이름을 넣어주면

그와 관련된 모든 문서들을 얻을 수 있다.

 

참고로 코드 2번째 줄의 

CollectionReference playlistref = db.Collection("playlist");

이 부분은, 컬렉션 중에, playlist 컬렉션을 가르킨다는 의미를 전달한 것일 뿐,

실제로 firestore과 연락을 취한 것은 아니다. 

 

3번째 줄에,

QuerySnapshot snapshot = await playlistref.GetSnapshotAsync();

이 부분에서, 저 주소에 대해서 data들을(snapshot들) 가져오라고 서버에 요청을 하게 되는 것인데,

"비동기"로 실시되어 await가 앞에 붙어 있음을 알 수 있다.

 

(await에 대해서 잘 모르시는 분들을 위해 간단하게 설명하자면, 저렇게 서버에서 데이터를 달라는 행위 같은 것들은

통신상황이나, 서버 상황에 따라 위에서 아래로 코드를 실행하게 되면, 대기를 오래 할 수도 있기 때문에,

따로 처리시키고 다음부분을 진행하게 된다. 이걸 비동기 프로그래밍이라고 하는데,

거기에 await를 붙이게 되면, 저 비동기처리가 완료된 후에, 나머지 코드를 실행하라는 뜻이 된다.

 

참고로 await를 메소드 내에서 사용하기 위해선 앞에 async를 붙여줘야 한다. 그래서 start 메소드 앞에도 async가 붙어있다. )

 

 

여기보면 playlist 컬렉션에는 1개의 문서가 있다. 여러 개 있다면 snapshot 객체에는 여러 개의 문서가 있었을 것이다.

각 문서에는 위 이미지처럼 key:value 형식의 data를 가지고 있다.

 

Foreach문을 보면, 우리가 받은 컬렉션에서 .document라는 속성을 통해 각 문서들에 접근 할 수 있음을 알 수 있다.

여기서 C#은 각 문서를 dictionary로 받을 수 있다. 각 문서에 대해 .todictionary를 통해 바꿔주면 수월하게 데이터를 처리할 수 있다.

 

코드에서는 단순히 log를 찍어주고 있지만, 다양한 오브젝트들을 만들어서 사용할 수 있다.

 

 

 

 

 

반응형
Comments