我有一个使用firebase数据库实时排名的迷你游戏。
在我从firebase获得用户分数列表后,我想获得列表之外的当前用户的分数。
获取当前用户的分数很容易,但如何知道列表中的排名是OrderByChild(“分数”)。
这是获取排行榜的代码。
List<UserScore> leaderBoard = new List<UserScore>();
FirebaseDatabase.DefaultInstance
.GetReference("user-scores")
.OrderByChild("score")
.LimitToLast(10)
.GetValueAsync()
.ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.Log("Fail To Load");
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
foreach (DataSnapshot h in snapshot.Children)
{
UserScore userScore = new UserScore(h.Child("uid").Value.ToString(), h.Child("name").Value.ToString(), h.Child("photo").Value.ToString(),int.Parse(h.Child("score").Value.ToString()));
leaderBoard.Add(userScore);
}
}
});
试试这个在排行榜中查找用户排名。这对我有用
代码后的示例图像
email_arrayList = new ArrayList();
var currentUser = FirebaseAuth.DefaultInstance.CurrentUser;
int rank = 0;
playerId = currentUser.UserId;
Debug.Log(playerId);
FirebaseDatabase.DefaultInstance.GetReference("users").ValueChanged += FirebaseSaveLoadScript_ValueChanged;
FirebaseDatabase.DefaultInstance
.GetReference("users").OrderByChild("userScore")
.ValueChanged += (object sender2, ValueChangedEventArgs e2) => {
if (e2.DatabaseError != null)
{
Debug.LogError(e2.DatabaseError.Message);
return;
}
Debug.Log("Received values for Leaders.");
string title = leaderBoard[0].ToString();
leaderBoard.Clear();
leaderBoard.Add(title);
if (e2.Snapshot != null && e2.Snapshot.ChildrenCount > 0)
{
foreach (var childSnapshot in e2.Snapshot.Children)
{
if (childSnapshot.Child("userScore") == null
|| childSnapshot.Child("userScore").Value == null)
{
Debug.LogError("Bad data in sample. Did you forget to call SetEditorDatabaseUrl with your project id?");
break;
}
else
{
Debug.Log("Leaders entry : " +
childSnapshot.Child("userEmail").Value.ToString() + " - " +
childSnapshot.Child("userScore").Value.ToString());
email_arrayList.Add(childSnapshot.Child("userEmail").Value.ToString());
leaderBoard.Insert(1, childSnapshot.Child("userScore").Value.ToString()
+ " " + childSnapshot.Child("userEmail").Value.ToString());
displayScores.text = "";
foreach (string item in leaderBoard)
{
displayScores.text += "\n" + item;
}
}
}
}
email_arrayList.Reverse();
foreach (string obj in email_arrayList)
{
rank++;
if (obj == currentUser.Email)
{
int rank_final = rank;
Debug.Log("I'm number " + rank_final + " in the rankings");
userRank.text = "Your Rank is " + rank_final;
rank = 0;
break;
}
Debug.Log(obj);
}
};
如何知道我的排名
这在一定程度上取决于“我的”是谁。但是假设您在变量UID
中有当前用户的UID。然后,您可以通过以下方法确定他们在前10名中的排名:
int rank = 0;
foreach (DataSnapshot h in snapshot.Children)
{
rank = rank + 1;
UserScore userScore = new UserScore(
h.Child("uid").Value.ToString(),
h.Child("name").Value.ToString(),
h.Child("photo").Value.ToString(),
int.Parse(h.Child("score").Value.ToString()));
leaderBoard.Add(userScore);
if (h.Child("uid").Value.ToString() == uid) {
Debug.Log("I'm number "+rank+" in the rankings");
}
}
我正在使用firebase实时数据库、unity和facebook(个人资料图片和姓名)制作排行榜 但是我在挣扎,我不确定这样做的方式。我想展示多个排行榜- 我知道我可以使用云功能重置每周和每月排行榜。但是如何存储世界和地区分数呢?现在我只有这个- https://cdn.discordapp.com/attachments/440873502535450627/82136147435388932
我想在我的应用程序中创建一个排行榜。排行榜应显示得分最高的10位最佳用户。我的Firebase数据库如下所示: Firebase Datenbank: 我已经创建了一个包含10个文本视图的活动。从第一个文本视图开始,我想将文本更改为: “第一名|‘用户名’|‘高分’分数” 现在我的问题是: 对我来说,做这件事最简单的方法是什么? 那么,保护数据库的最佳方式是什么,以便只能使用应用程序更改数据?
获取全站粉丝排行 获取财富达人排行 获取全站收入排行 获取全站粉丝排行 根据全站的用户粉丝数进行的排序 GET /ranks/followers 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 offset int - 偏移量 默认为0 响应 Http Status 200 Ok [ { "id": 1, "name": "baishi"
获取资讯排行 获取资讯排行 根据一定时间内的资讯获得的浏览量量进行的排序 GET /news/ranks 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 type string - 筛选类型 day - 日排行 week - 周排行 month - 月排行 offset int - 偏移量 默认为0 响应 Http Status 200 Ok [ {
获取解答排行 获取问答达人排行 获取社区专家排行 获取解答排行 根据一定时间内发布的回答数进行的排序 GET /question-ranks/answers 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 type string - 筛选类型 day - 日排行 week - 周排行 month - 月排行 offset int - 偏移量 默认为0 响应 H
获取动态排行 获取动态排行 根据一定时间内的动态获得的点赞量进行的排序 GET /feeds/ranks 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 type string - 筛选类型 day - 日排行 week - 周排行 month - 月排行 offset int - 偏移量 默认为0 响应 Http Status 200 Ok [ {