유니티/뒤끝

랭킹 구현

잼잼재미 2024. 6. 19. 00:03

 

 

1. 데이터 테이블 생성

데이터 테이블에 있는 데이터를 비교하는 것이기 때문에 데이터 테이블을 생성하고 해당 데이터가 존재해야 한다.

 

https://kkln2486.tistory.com/445

 

뒤끝 회원가입, 로그인, 데이터 송수신

회원가입 public void SignUp(){ BackendReturnObject bro = Backend.BMember.CustomSignUp("ID", "PASSWORD"); if (bro.IsSuccess()) { Debug.Log("회원가입에 성공했습니다"); }} * 뒤끝 서버 연동 후, 사용 가능  로그인public void Login

kkln2486.tistory.com

 

 

2. 랭킹 생성

 

 

다음과 같이 랭킹 내용과 맞게 설정

 

  • 테이블 : 생성한 데이터 테이블 선택
  • 컬럼 : 랭킹 순위에 기준이 되는 데이터 선택
  • 정렬 기준 : 높은 숫자가 높은 랭킹을 가진다면 내림차순 선택

 

 

 

UUID를 복사한다.

 

 

※ 추가 항목 사용

score 데이터 외, Atk, Def, Coin 등 추가 데이터를 저장해야 하면 추가 항목에서 선택한다.

 

 

3. 데이터 테이블 갱신, 랭킹 데이터 갱신

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using BackEnd;

public class RankSystem : MonoBehaviour
{
    // 복사한 UUID 
    private const string RANK_UUID = "0e2dbad0-2f28-11ef-aa40-01846ff1933e";

    public void UpdateRank(int value)
    {
        UpdateMyRankData(value);
    }

    private void UpdateMyRankData(int value)
    {
        string rowInDate = string.Empty;

        // 랭킹 데이터를 업데이트하려면 게임 데이터에서 사용하는 데이터의 inDate 값 필요
        BackendReturnObject bro = Backend.GameData.GetMyData("USER_DATA", new Where());
        
        if (!bro.IsSuccess())
        {
            Debug.LogError("랭킹 업데이트를 위한 데이터 조회 중 문제가 발생했습니다.");
            return;
        }

        Debug.Log("랭킹 업데이트를 위한 데이터 조회에 성공했습니다.");

        if(bro.FlattenRows().Count > 0)
        {
            rowInDate = bro.FlattenRows()[0]["inDate"].ToString();
        }
        else
        {
            Debug.LogError("데이터가 존재하지 않습니다.");
        }

        Param param = new Param()
        {
            {"RankPoint",  value}
        };

        // 해당 데이터테이블의 데이터를 갱신하고, 랭킹 데이터 정보 갱신
        bro = Backend.URank.User.UpdateUserScore(RANK_UUID, "USER_DATA", rowInDate, param);
        
        if(bro.IsSuccess())
        {
            Debug.Log("랭킹 등록에 성공했습니다.");
        }
        else
        {
            Debug.LogError("랭킹 등록에 실패했습니다.");
        }
    }
}

 

 

 

위 UpdateMyRankData 함수를 실행하면 데이터 테이블의 데이터와 랭킹 데이터가 갱신된다.

 

 

※ 추가 항목 사용 시

 

추가 항목을 사용하면 랭킹 데이터의 닉네임과 추가 항목이 자동으로 함께 갱신된다.

 

 

4. 나의 랭킹 불러오기

using BackEnd;
using LitJson;

private const string RANK_UUID = "2c3f27e0-2f8f-11ef-bb57-c3ce12361efc";

public void GetMyRank()
{
    // 내 랭킹 정보 불러오기
    BackendReturnObject bro = Backend.URank.User.GetMyRank(RANK_UUID);

    if(bro.IsSuccess())
    {
        try
        {
            JsonData rankDataJson = bro.FlattenRows();

            // 받아온 데이터의 개수가 0 -> 데이터가 없음
            if (rankDataJson.Count <= 0)
            {
                Debug.Log("나의 랭킹 데이터가 존재하지 않습니다.");

                _myRankText.text = "-";
                _myRankPointText.text = "-";
                _myUserNameText.text = "-";
                _myWinLoseText.text = "-";

            }
            else
            {
                _rankPoint = int.Parse(rankDataJson[0]["score"].ToString());
                _rank = int.Parse(rankDataJson[0]["rank"].ToString());
                _userName = rankDataJson[0]["nickname"].ToString();
                
                // 복수 데이터의 추가 항목 사용 시
                //string[] extraData = rankDataJson[i]["WinLose"].ToString().Split("|");
                //_win = int.Parse(extraData[0].ToString());
                //_lose = int.Parse(extraData[1].ToString());

                // 랭킹 데이터가 보이도록 설정
            }
        }
        // 나의 랭킹 정보 JSON 데이터 파싱에 실패했을 때
        catch (System.Exception e)
        {
            Debug.LogError(e);

            _myRankText.text = "-";
            _myRankPointText.text = "-";
            _myUserNameText.text = "-";
            _myWinLoseText.text = "-";
        }
    }
    else
    {
        // 나의 랭킹 정보를 불러오는데 실패했을 때

        _myRankText.text = "-";
        _myRankPointText.text = "-";
        _myUserNameText.text = "-";
        _myWinLoseText.text = "-";
    }
}

 

* 랭킹 데이터의 score, rank, nickname만 불러올 수 있고, 그 외 데이터는 추가 항목을 사용해야 한다.

* 추가 항목의 데이터를 불러올 때, "extraData"가 아닌, 지정한 데이터 이름을 사용해야 한다.

 

 

 

 

 

4. 유저 랭킹 불러오기

private const string RANK_UUID = "ca724250-2fb0-11ef-a678-3bbc47fe804b";
private const int MAX_RANK_LIST = 10;

public void GetRankList()
{
    // 랭킹 테이블에 있는 유저의 offset ~ offset + limit 순위 랭킹 정보를 불러옴
    BackendReturnObject bro = Backend.URank.User.GetRankList(RANK_UUID, MAX_RANK_LIST, 0);

    if(bro.IsSuccess())
    {
        // JSON 데이터 파싱 성공
        try
        {
            Debug.Log("랭킹 조회에 성공했습니다.");
            JsonData rankDataJson = bro.FlattenRows();

            // 받아온 데이터의 개수가 0 -> 데이터가 없음
            if(rankDataJson.Count <= 0)
            {
                Debug.Log("랭킹 데이터가 존재하지 않습니다.");

                for (int i = 0; i < MAX_RANK_LIST; i++)
                {
                    // 랭킹 데이터 비활성화
                }
            }
            else
            {
                int rankCount = rankDataJson.Count;

                // 받아온 rank 데이터의 숫자만큼 데이터 출력
                for (int i = 0; i < rankCount; i++)
                {
                    _rankPoint = int.Parse(rankDataJson[i]["score"].ToString());
                    _rank = int.Parse(rankDataJson[i]["rank"].ToString());
                    _userName = rankDataJson[i]["nickname"].ToString();
                    
                    // 복수 데이터의 추가 항목 사용 시
                    //string[] extraData = rankDataJson[i]["WinLose"].ToString().Split("|");
                    //_win = int.Parse(extraData[0].ToString());
                    //_lose = int.Parse(extraData[1].ToString());

                    // 랭킹 데이터 활성화

                }
                // rankCount가 Max값만큼 존재하지 않을 때, 나머지 랭킹
                for (int i = rankCount; i < MAX_RANK_LIST; i++)
                {
                    // 랭킹 데이터 비활성화
                }
            }
        }
        // JSON 데이터 파싱 실패
        catch (System.Exception e)
        {
            Debug.LogError(e);

            for (int i = 0; i < MAX_RANK_LIST; i++)
            {
                // 랭킹 데이터 비활성화
            }
        }
    }
    else
    {
        Debug.LogError("랭킹 조회에 실패했습니다.");

        for (int i = 0; i < MAX_RANK_LIST; i++)
        {
            // 랭킹 데이터 비활성화
        }
    }
}

 

 

 

'유니티 > 뒤끝' 카테고리의 다른 글

뒤끝 회원가입, 로그인, 데이터 송수신  (0) 2024.06.19
뒤끝 시작하기  (0) 2024.06.17