1인 개발/PushAndSlash

푸쉬앤슬래시 개인 프로젝트 29일차

잼잼재미 2024. 6. 22. 13:05

구현 내용


1. 나의 랭킹 구현


랭킹 데이터가 존재하지 않을 때
나의 랭킹 데이터가 존재할 때

 

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 = "-";
    }
}

 

 

2. 유저 랭킹 구현


 

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++)
        {
            // 랭킹 데이터 비활성화
        }
    }
}

 

 

https://kkln2486.tistory.com/443

 

랭킹 구현

1. 데이터 테이블 생성데이터 테이블에 있는 데이터를 비교하는 것이기 때문에 데이터 테이블을 생성하고 해당 데이터가 존재해야 한다. https://kkln2486.tistory.com/445 뒤끝 회원가입, 로그인, 데이

kkln2486.tistory.com

 

 

회고


어제 랭킹 구현 중, 뒤끝 서버 에러가 발생해서 랭킹 구현을 완료하지 못했다. 에러 내용으로 봐서 뒤끝 서버 과부하라고 생각했지만, 내가 구현한 코드에 문제가 있었다. 랭킹 데이터를 가져올 때, score 값과 함께 다른 데이터를 가지고 오기 위해 추가 항목을 사용했다. 추가 항목에 2개 이상의 데이터를 저장하기 위해 배열을 사용했는데, 이 방법이 잘못된 방법이었다. 뒤끝 홈페이지의 문서 내용을 참고한 결과, 추가 항목에 2개 이상의 데이터를 가지고 오기 위해서는 "3|5" 이런 식으로 특수 기호를 중간에 넣고 하나의 string 값으로 데이터를 저장해야했다. 그리고 split 함수를 통해, string을 나누는 작업을 통해 안전하게 랭킹 데이터의 여러가지 값을 가지고 올 수 있었다. 이렇게 랭킹 구현을 모두 완료했다. 거의 일주일 정도 구현을 하면서 뒤끝 서버에 대한 사용법을 익히면서 많이 어려웠다. 타 서버에 비해 비교적 사용하기 쉬운 서버라지만, 아직까지는 많이 어려웠다. 하지만 블로그에 잘 정리를 했기 때문에 다음 프로젝트에서는 확실하게 더 이상 헤매지않고 쉽게 구현할 수 있을 것 같다! 이제 Admob을 통해 광고를 구현하도록 하겠다.