firebase에서 10등까지 데이터 가져오고, 내 현재 랭킹 데이터 가져오기

열심이·2023년 5월 29일

게임

목록 보기
1/1

Firebase Realtime Database를 사용하여 10등까지의 데이터를 가져오고, 사용자의 현재 랭킹 데이터를 가져오는 방법을 안내해 드리겠습니다. 아래는 예시로 주어지는 코드입니다.

using UnityEngine;
using UnityEngine.UI;
using Firebase;
using Firebase.Database;
using Firebase.Extensions;

public class LeaderboardUI : MonoBehaviour
{
    public Text leaderboardText; // 리더보드를 표시할 Text
    public Text myRankText; // 내 랭킹을 표시할 Text

    private DatabaseReference databaseRef; // Firebase Realtime Database 레퍼런스

    private void Start()
    {
        // Firebase Realtime Database 레퍼런스 초기화
        databaseRef = FirebaseDatabase.DefaultInstance.RootReference;

        // 리더보드 데이터 로드 및 UI 업데이트
        LoadLeaderboardData();
    }

    private void LoadLeaderboardData()
    {
        // 리더보드 데이터 조회
        databaseRef.Child("leaderboard").OrderByChild("score").LimitToFirst(10).GetValueAsync().ContinueWithOnMainThread(task =>
        {
            if (task.IsFaulted || task.IsCanceled)
            {
                // 데이터 로드 실패 처리
                Debug.LogError("Failed to load leaderboard data.");
            }
            else if (task.IsCompleted)
            {
                // 리더보드 데이터 로드 성공
                DataSnapshot snapshot = task.Result;
                string leaderboardData = "";

                int rank = 1;
                foreach (var childSnapshot in snapshot.Children)
                {
                    string username = childSnapshot.Child("username").Value.ToString();
                    int score = int.Parse(childSnapshot.Child("score").Value.ToString());

                    leaderboardData += rank + ". " + username + ": " + score + "\n";
                    rank++;
                }

                // 리더보드 텍스트 업데이트
                leaderboardText.text = leaderboardData;

                // 내 랭킹 데이터 로드 및 업데이트
                LoadMyRankData();
            }
        });
    }

    private void LoadMyRankData()
    {
        // 사용자의 닉네임을 기반으로 현재 랭킹 데이터 조회
        string myNickname = "사용자의 닉네임을 가져오는 로직을 구현해야 합니다."; // 사용자의 닉네임을 가져와야 합니다.

        // 사용자의 닉네임을 기준으로 데이터 조회
        var query = databaseRef.Child("leaderboard").OrderByChild("username").EqualTo(myNickname);

        // 쿼리 실행하여 결과 가져오기
        query.GetValueAsync().ContinueWithOnMainThread(task =>
        {
            if (task.IsFaulted || task.IsCanceled)
            {
                // 데이터 로드 실패 처리
                Debug.LogError("Failed to load my rank data.");
            }
            else if (task.IsCompleted)
            {
                DataSnapshot snapshot = task.Result;

                // 사용자의 랭킹 데이터 가져오기
                if (snapshot.HasChildren)
                {
                    foreach (var childSnapshot in snapshot.Children)
                    {
                        int myRank = int.Parse(childSnapshot.Child("rank").Value.ToString());

                        // 내 랭킹 텍스트 업데이트
                        myRankText.text = "내 랭킹: " + myRank;
                    }
                }
                else
                {
                    // 사용자 데이터가 없는 경우 처리
                    myRankText.text = "내 랭킹: 데이터 없음";
                }
            }
        });
    }
}

위 코드에서는 LeaderboardUI 스크립트를 사용하여 10등까지의 리더보드 데이터와 사용자의 현재 랭킹 데이터를 가져옵니다.

주요 요소 설명:

  • leaderboardText: 리더보드를 표시할 Text 컴포넌트입니다.
  • myRankText: 내 랭킹을 표시할 Text 컴포넌트입니다.
  • LoadLeaderboardData(): Firebase Realtime Database에서 10등까지의 리더보드 데이터를 조회하고, UI를 업데이트하는 함수입니다.
  • LoadMyRankData(): 사용자의 닉네임을 기준으로 현재 랭킹 데이터를 조회하고, UI를 업데이트하는 함수입니다.

위 코드를 사용하면 Firebase Realtime Database에서 10등까지의 리더보드 데이터를 가져와 UI에 표시하고, 사용자의 닉네임을 기준으로 현재 랭킹 데이터를 가져와 UI에 표시합니다. 닉네임을 가져오는 로직은 구현되어야 하며, 해당 로직에 따라 사용자의 닉네임을 설정하시면 됩니다.

profile
열심이하는자

0개의 댓글