카테고리 없음
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 |