카테고리 없음

Firebase 저장, 불러오기, 정렬

Korokke 2021. 8. 20. 01:44

 

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Firebase;
using Firebase.Database;
 
 
public class RankingManager : MonoBehaviour
{
    public DatabaseReference reference;
 
    private void Awake()
    {
        reference = FirebaseDatabase.DefaultInstance.RootReference;
       
    }
    
    public void Start()
    {
        reference.Child("Ranking").Child("BPM300").Child("fdsfsdsd1").SetRawJsonValueAsync(jsonScore);                   // Default/Ranking/BPM/fdsfsdsd1에 jsonScore라는 json 저장하기
        myUID = auth.CurrentUser.UserId;                                                                                 // 현재 내 UID를 가져오기
    }
    
 
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
    public void loadData()                              //데이터베이스에 있는 값을 가지고 오기
    {
        FirebaseDatabase.DefaultInstance.GetReference("users").ValueChanged += DatabaseManager_ValueChanged;
    }
 
    private void DatabaseManager_ValueChanged(object sender, ValueChangedEventArgs e)      
    {
        
        if(e.Snapshot.Child(FirebaseLogIn.myUID).Child("nName").GetValue(true!= null)                                     // 만약에 데이터베이스에 저장된 닉네임이 있고,
        {
            thisIsNickname = e.Snapshot.Child(FirebaseLogIn.myUID).Child("nName").GetValue(true).ToString();
            userNickName.text = thisIsNickname;
            
 
            if (e.Snapshot.Child(FirebaseLogIn.myUID).Child("emerald").GetValue(true!= null)                                // 만약 데이터베이스에 저장된 재화가 null이 아니면 
            {
                savedDia = int.Parse(e.Snapshot.Child(FirebaseLogIn.myUID).Child("dia").GetValue(true).ToString());
                userDiaText.text = savedDia.ToString();
                savedEmerald = int.Parse(e.Snapshot.Child(FirebaseLogIn.myUID).Child("emerald").GetValue(true).ToString());
                userEmeraldText.text = savedEmerald.ToString();
                 
            }
            else                                                                                                            // 만약 데이터베이스에 저장된 재화가 null이면(게임을 처음 실행하는 경우)
            {
                userDia = 0;
                userEmerald = 0;
                userDiaText.text = userDia.ToString();
                userEmeraldText.text = userEmerald.ToString();
                User user1 = new User(googleName, setNickname, userDia, userEmerald, myCount);                              // googleName = Social.localUser.userName (구글이름), setNickname 은 닉네임 입력한 값이 들어간다
                string json = JsonUtility.ToJson(user1);                                                                      // json으로 바꾼 값 스트링으로 저장
                reference.Child("users").Child(FirebaseLogIn.myUID).SetRawJsonValueAsync(json);
            }
  
        }
     
    }
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     public void GetRanking()                                                          //스코어 가지고 오기
    {
        FirebaseDatabase.DefaultInstance.GetReference("Ranking").Child("BPM300").OrderByChild("score").ValueChanged += DatabaseManager_ValueChanged1; // Default/Ranking/BPM300 안에 있는 것들을 score로 정렬시킨다 
                                                                                                                                                      // 이러면 작은 값들 부터 온다. 만약 상위 50개를 가지고 오고 싶으면 
    }                                                                                                                                                  // LimitToLast(50) 쓰면 될 듯. 아직 안써봄.
 
    private void DatabaseManager_ValueChanged1(object sender, ValueChangedEventArgs e)
    {
        if (e != null)
        {
            listCount = (int)(e.Snapshot.Child("BPM300").ChildrenCount);                                                                                // ChildrenCount는 자식 갯수 가지고 오는 거
            print(listCount);
            
 
            foreach (var score in e.Snapshot.Children)                                      
            {
                count = count + 1;
                if (count <= 50)
                {
                print("score: " + score.Key);                                         
                                                                             
                }
                else
                    break;
            }
            
 
        }
 
        else
        {
            GetRanking();                                                                                                                                   // 가져오는데 실패하면 다시 가져오기
        }
 
    }
}
 
cs