본문 바로가기
게임/Unity

[Unity 이론] Firebase Database 데이터 사용

by 신인용 2019. 11. 28.
반응형

Firebase Database 데이터 사용

 

 

 저번 글에서 Firebase Database를 연동했으니 이제 Database에 존재하는 데이터를 사용해보도록 하겠습니다.

 

 

1. 데이터 입력

 지난 글에서 입력했던 데이터베이스를 토대로 시작하겠습니다.

이 데이터베이스에서 추가로 "나일등"의 점수와 시간을 입력하도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
// Firebase 불러오기
 
public class GameManager : MonoBehaviour{
    class Rank{
        // 순위 정보를 담는 Rank 클래스
        // Firebase와 동일하게 name, score, timestamp를 가지게 해야함
        public string name;
        public int score;
        public int timestamp;
        // JSON 형태로 바꿀 때, 프로퍼티는 지원이 안됨. 프로퍼티로 X
        
        public Rank(string name, int score, int timestamp){
            // 초기화하기 쉽게 생성자 사용
            this.name = name;
            this.score = score;
            this.timestamp = timestamp;
        }
    }
 
    public DatabaseReference reference { get; set; }
    // 라이브러리를 통해 불러온 FirebaseDatabase 관련객체를 선언해서 사용
 
    void Start(){
        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://inyongsgameserver.firebaseio.com/");
        reference = FirebaseDatabase.DefaultInstance.RootReference;
        // 데이터베이스 경로를 설정해 인스턴스를 초기화
        // Database의 특정지점을 가리킬 수 있는데, 그 중 RootReference를 가리킴
 
        Rank rank = new Rank("나일등"1001574940551);
        string json = JsonUtility.ToJson(rank);
        // 데이터를 json형태로 반환
 
        string key = reference.Child("rank").Push().Key;
        // firebase에 key값은 0 신인용, 1 황제리, 2 김젤리.
        // root의 자식 rank에 key 값을 추가해주는 것임
 
        reference.Child("rank").Child(key).SetRawJsonValueAsync(json);
        // 생성된 키의 자식으로 json데이터를 삽입
    }
}
 
cs

 다음과 같이 새로운 key 값(기괴한 값이지만...)에 제가 입력한 정보들이 추가되었습니다.

 

 

 

 

2. 데이터 불러오기

 Firebase에 정보를 입력하는 것을 했으니 이제 불러오는 것을 해보겠습니다.

데이터베이스에 rank의 모든 사용자의 name과 score를 출력하도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
// Firebase 불러오기
 
public class GameManager : MonoBehaviour{
    class Rank{
        // 순위 정보를 담는 Rank 클래스
        // Firebase와 동일하게 name, score, timestamp를 가지게 해야함
        public string name;
        public int score;
        public int timestamp;
        // JSON 형태로 바꿀 때, 프로퍼티는 지원이 안됨. 프로퍼티로 X
        
        public Rank(string name, int score, int timestamp){
            // 초기화하기 쉽게 생성자 사용
            this.name = name;
            this.score = score;
            this.timestamp = timestamp;
        }
    }
 
    public DatabaseReference reference { get; set; }
    // 라이브러리를 통해 불러온 FirebaseDatabase 관련객체를 선언해서 사용
 
    void Start(){
        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://inyongsgameserver.firebaseio.com/");
        // 데이터베이스 경로를 설정해 인스턴스를 초기화
 
        reference = FirebaseDatabase.DefaultInstance.GetReference("rank");
        // 사용하고자 하는 데이터를 reference가 가리킴
        // 여기선 rank 데이터 셋에 접근
 
        reference.GetValueAsync().ContinueWith(task => {
            if (task.IsCompleted){ // 성공적으로 데이터를 가져왔으면
                DataSnapshot snapshot = task.Result;
                // 데이터를 출력하고자 할때는 Snapshot 객체 사용함
 
                foreach(DataSnapshot data in snapshot.Children){
                    IDictionary rank = (IDictionary)data.Value;
                    Debug.Log("이름: " + rank["name"+ ", 점수: " + rank["score"]);
                    // JSON은 사전 형태이기 때문에 딕셔너리 형으로 변환
                }
            }
        });
    }
}
 
cs

 정상적으로 rank에 속해있던 사용자들의 이름과 점수가 출력되는 것을 확인할 수 있습니다.

 

 

 

이로써 데이터베이스의 데이터를 추가하고, 불러오는 방법을 알게 되었습니다.

반응형

댓글