본문 바로가기

Unity

Playfab - 3 statistics(통계), int | Data(플레이어 데이터), string 저장

https://learn.microsoft.com/ko-kr/gaming/playfab/features/data/playerdata/using-player-statistics

 

 

통계를 사용하기 위해서 타이틀 톱니 아이콘 - 타이틀 설정 - API 기능 - 클라이언트가 플레이어의 통계를 게시할 수 있도록 허용해야한다

1. Statistics(통계)를 사용하여 int 값 저장

    public void SetStat()
    {
        PlayFabClientAPI.UpdatePlayerStatistics(new UpdatePlayerStatisticsRequest
        {
            Statistics = new List<StatisticUpdate>
            {
                new StatisticUpdate {StatisticName = "first", Value = int.Parse(first.text)},
                new StatisticUpdate {StatisticName = "second", Value = int.Parse(second.text)},
                new StatisticUpdate {StatisticName = "third", Value = int.Parse(third.text)},
            }
        },
        (result) => { log.text = "success"; print("저장"); },
        (error) => { log.text = "fail"; print("실패"); });
    }

    public void GetStat()
    {
        PlayFabClientAPI.GetPlayerStatistics(new GetPlayerStatisticsRequest(),
            (result) =>
            {
                log.text = "";
                foreach (var eachStat in result.Statistics)
                {
                    log.text += eachStat.StatisticName + " : " + eachStat.Value + "\n";
                }
            },
            (error) => { log.text = "값 불러오기 실패"; });
    }

 

로그인 후에 first second third에 각각 10 20 30을 누르고 save 버튼을 누르면 success 성공이 뜬다.

이후 Load버튼을 누르면 저장되어 있던 값을 가져올 수 있다.

플레이팹에서 실제로 저장이 된 것을 볼 수 있다.

 

2. Data (플레이어 데이터)를 사용하여 Dic<string, string> 값 저장

 

    public void OnRegisterBtn()
    {
        var request = new RegisterPlayFabUserRequest { Email = emailIput.text, Password = passwordInput.text, Username = nameInput.text };
        PlayFabClientAPI.RegisterPlayFabUser(request, OnRegisterSuccess, OnRegisterFailure);
    }

    private void OnLoginSuccess(LoginResult result) 
    {
        print("로그인 성공");
        myID = result.PlayFabId;
    }

우선 Statistic 코드에서 OnLoginSuccess 부분에 myID에 PlayFabId를 저장한다.

이러면 성공적으로 로그인이 될 때, 자신의 플레이팹 아이디를 가져온다.

 

    public void SetData()
    {
        var request = new UpdateUserDataRequest() { Data = new Dictionary<string, string>() { {"A", "AAA"}, {"B", "BBB"} } };
        PlayFabClientAPI.UpdateUserData(request, (result) => print("데이터 저장 성공"), (error) => print("데이터 저장 실패"));
    }

    public void GetData()
    {
        // 누구의 데이터를 가져올 것인지 특정하기 위해 PlayfabID를 request에 넣어줘야 한다. 
        var request = new GetUserDataRequest() { PlayFabId = myID };
        PlayFabClientAPI.GetUserData(request, (result) => { foreach (var eachData in result.Data) log.text += eachData.Key + " : " + eachData.Value.Value + "\n"; }, (error) => print("데이터 불러오기 실패"));
    }

Save Data 버튼을 누르면 SetData 함수가 실행되게 했다. 실제로 PlayFab에 저장이 되는 것을 확인할 수 있었다.

Load Data 버튼을 누르면 GetData 함수가 실행되게 했는데 이것 역시 정상적으로 작동한다.

 

 

특정 데이터 가져오기

특정 데이터만 가져오고 싶을 때는 switch나 if문을 사용해 result.Data[가져오고 싶은 key]를 사용하면 된다.

    public void GetData(string key = "")
    {
        // 누구의 데이터를 가져올 것인지 특정하기 위해 PlayfabID를 request에 넣어줘야 한다. 
        var request = new GetUserDataRequest() { PlayFabId = myID };
        log.text = "";
        
        PlayFabClientAPI.GetUserData(request, (result) => 
        {
            
            switch (key)
            {
                case "A": log.text = "A" + " : " + result.Data["A"].Value; break;
                case "B": log.text = "B" + " : " + result.Data["B"].Value; break;
                default:  foreach (var eachData in result.Data) log.text += eachData.Key + " : " + eachData.Value.Value + "\n";   break;
            }
        }, 
        
        (error) => print("데이터 불러오기 실패"));
    }

 

특정 데이터 가져오기 결과

 

'Unity' 카테고리의 다른 글

UI Element  (0) 2022.11.27
Playfab - 4 가상화폐, 상점, 아이템, 인벤토리  (0) 2022.10.31
Playfab - 2 playfab 로그인 회원가입 기능  (0) 2022.10.23
Playfab - 1 임포트 및 설정  (0) 2022.10.21
Vector의 기본  (0) 2022.05.05