Unity勉強中!あこがれだったプログラマーに今からなろう!

昔あこがれだったプログラマー。今からでもUnityを勉強してみようと思い立ち、チャレンジ開始! Unity勉強メモや、悪戦苦闘な日々の記録です。

Unity+PlayFabでランキング機能を作る(1)

前回も書いたけど、ニフクラでのランキングはどうにも、しっくりこなかったので、Playfabでのランキング実装をやってみることにした。

まずはPlayfabのアカウント登録だが、僕の環境では普通に検索すると、AzurePlayFabが先頭に来てしまうが、とりあえずこれは別物。
PlayFabのアカウント登録は、ここになります。https://developer.playfab.com/en-us/sign-up

利用料金は非常に難解で、僕には理解しきれませんでしたが、オンラインサロンの皆に聞いた限りでは、料金請求された事がないそうなので、そこまで気にする事はないのかも。
むしろ、料金発生するくらい遊んでもらえれば、それはそれで本望😆

とはいえ、ご利用は自己責任です🤣

他のアプリを作成する時のための備忘録として、実装方法を記載しておきます。


PlayFabアカウントを作成したら、https://learn.microsoft.com/ja-jp/gaming/playfab/sdks/unity3d/quickstart
を参考にUnityにPlayfabを適用してログインし、SDKを適用する。
さらに、PlayfabのAPI設定で「クライアントがプレーヤー統計を投稿できるようにする」にチェックを入れる。
この辺りは、しまづさんの動画で詳しく説明があるので、下記の14:50くらいを見てください。

www.youtube.com


これで漸く、アプリにPlayfabへのアクセスを作成していく様になる。

まずは、Playfabにプレイヤーとしてログインするためのアカウントを作成する。
アカウントというとちょっと面倒に思うところだけど、実際のところ、この辺りはUnityとPlayfabが勝手に処理してくれるので、そこまで畏まる必要はない😀

必要なのはカスタマID。文字で固定で指定もできるが、いろんな人に遊んでもらうために、ここはGUIDをSystemから生成して使うことにした。
それを踏まえて、ログインはこんな感じにした。

using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using UnityEngine;
using UniRx;
using PlayFab;  //Playfabを使う時のお約束
using PlayFab.ClientModels;   //Playfabを使う時のお約束
using System;

public class GameManager : MonoBehaviour
{

    public int[] scrnking=new int[5];
    public string[] scrnkingName=new string[5];
    public int[] scrnkingScore=new int[5];

    private void Start()
    {
        public ReactiveProperty<int> Score = new ReactiveProperty<int>(0) ;
        var guid=System.Guid.NewGuid(); //GUIDの取得

        PlayFabClientAPI.LoginWithCustomID(
            new LoginWithCustomIDRequest { CustomId = guid.ToString(), CreateAccount = true}, //端末固有IDを使ってアカウントを生成してログイン。
            result => Debug.Log("ログイン成功!"),
            error => Debug.Log("ログイン失敗"));

        Invoke("GetRanking",10);  //ログインには数秒かかるので、ランキング取得は10秒後に行なっている。
    
    }

public void GetRanking()
    {
        PlayFabClientAPI.GetLeaderboard(
            new GetLeaderboardRequest
            {
                StatisticName = "HighScore", //あらかじめ、Playfabにこの名前のリーダーボードを作成しておく。
                StartPosition = 0,   //取得順の最上位から
                MaxResultsCount = 5 //何番目までを取得。ここでは5位まで。ランキングはあらかじめ5位まで作成しておく。
            },
            result =>
            {
                
                for (int i = 0; i < 5; i++)  //取得したランキングを変数に格納。
                {
                    scrnking[i]=(int)result.Leaderboard[i].Position+1;  
                    scrnkingName[i]=result.Leaderboard[i].DisplayName;
                    scrnkingScore[i]=(int)result.Leaderboard[i].StatValue;
                }
            },
            error =>
            {
                Debug.Log("エラー");
                Debug.Log(error.GenerateErrorReport());
            }
            );

    }
}

タイムオーバーになって、ゲームが終わってスコアが確定したら、格納しておいたランキングのスコアと順位を判定してやれば良い。

今日の時点は、取得しておいたランキングの表示に留めた。

明日はスコア判定とスコアアップを実装しよう。