【发布时间】:2018-06-20 12:04:53
【问题描述】:
我正在一个 Unity 项目中使用 Firebase 数据库。我读到您希望将数据库构建为尽可能平坦以提高性能,因此对于排行榜,我将其构建为这样
users
uid
name
uid
name
leaderboard
uid
score
uid
score
我想要一个可以获取这些数据并在完成后触发回调的类。我在我的构造函数中运行它。
root.Child("leaderboard").OrderByChild("score").LimitToLast(_leaderboardCount).ValueChanged += onValueChanged;
用我写的数据触发回调。
void onValueChanged(object sender, ValueChangedEventArgs args)
{
int index = 0;
List<string> names = new List<string>();
foreach (DataSnapshot snapshot in args.Snapshot.Children)
{
root.Child("players").Child(snapshot.Key).GetValueAsync().ContinueWith(task =>
{
if (task.Result.Exists)
{
names.Add(task.Result.Child("name").Value.ToString());
index++;
if (index == args.Snapshot.ChildrenCount)
{
_callback(names);
}
}
});
}
}
我想知道是否有更好的方法来做到这一点,我错过了?我担心如果任务无序完成,我的排行榜会变得混乱。我可以在一张快照中获得姓名和分数吗?
谢谢!
【问题讨论】:
-
您还可以复制您的数据:还可以将名称与分数一起存储。
标签: firebase unity3d firebase-realtime-database