【Unity】GameCenterのLeaderBoardを利用する方法

AppStoreのLeaderBoardを使うと、ゲームのスコアを他のプレイヤーと競えます。

私もUnityで作った物理パズルゲームに、LeaderBoardと連携する機能を追加してみました。

手順としては、

  1. iTunes ConnectでLeaderBoardの設定をする
  2. UnityでLeader Boardと連携するコードを追加する
  3. iPhoneでGameCenterを有効にした状態でアプリを実行して動作確認

と言う順番でやりました。

1つずつ見ていきましょう。

[toc]

iTunes Connectでの作業

LeaderBoardの作成

iTunes Connectにログインしてアプリを選択すると上部に「AppStore」「機能」「TestFlight」の3つのタブがあります。

機能タブ→GameCenterを選択します。

ここにLeaderBoardを追加していきます。

「標準」を選択。

日本語にローカライズします。

日本語にして、名前は「ハイスコア」、フォーマットはint、フォーマットサフィックスは「点」にしました。

追加された画面です。

アプリにLeaderboardを追加する

次に、「AppStore」「機能」「TestFlight」の3つのタブからAppStoreを選択し、「Leaderboardを追加」します。

登録が完了しました。

Unityでコードを書く

処理としては3つです。

  1. ユーザ認証
  2. スコア送信
  3. Leader Boardの表示

1のユーザ認証に成功していないと、2、3は動きません。

私はタイトル画面シーンで1のユーザ認証だけを行ってから、ゲーム画面シーンで2、3ができるようにしました。

同じシーンで1〜3をやる必要はないので、シーンごとに処理を分けても大丈夫です。

using UnityEngine;
using UnityEngine.SceneManagement;

public class LeaderBoard : MonoBehaviour
{
    // リーダボードID itunesConnectで設定した値を入力
    private const string leaderBoardId = "highscore";

    public static LeaderBoard instance = null;

    void Awake()
    {
        if(instance == null)
        {
            instance = this;
        }

        if(SceneManager.GetActiveScene().name == "Title")
        {
            userAuth();
        }
    }

    public void userAuth()
    {
        // 初期化処理
        Social.localUser.Authenticate(processAuthentication);
    }

    // 初期化処理が終了した時に呼ばれる, 引数は成功したかどうか
    private void processAuthentication(bool success)
    {
        if (success)
        {
            // 認証が成功した時の処理
            Debug.Log("authentication success");
        }
        else
        {
            // 認証が失敗した時の処理
            Debug.Log("authentication fail");
        }
    }

    // リーダーボードの表示
    public void ShowLeaderBoard()
    {
        Social.ShowLeaderboardUI();
    }

    // ハイスコアの送信処理
    public void SendScore(int score)
    {
        Social.ReportScore(score, leaderBoardId, success => {
            if (success)
            {
                // 送信が成功した時の処理
                Debug.Log("report success");
            }
            else
            {
                // 送信が失敗した時の処理
                Debug.Log("report fail");
            }
        });
    }
}

実機確認

iPhoneの設定でGameCenterを有効にします。

ちなみに、GameCenterが有効出ない状態でアプリを動かすと、Xcodeで以下のメッセージが出てきます。

「ローカルプレイヤーが認証されていないため要求された操作は完了できませんでした。」

私はこれのせいで結構ハマってました。

次にアプリを起動し、ユーザ認証の処理が正常に動くと、以下の画面が表示されます。

LeaderBoardを表示すると以下の画面に切り替わりました。

スコアの送信時に画面はありませんが、ゲームの終了時にSendScoreを呼び出せばスコアが送信されます。

注意点

動かない時は以下を確認しましょう。

  • アプリとiTunesConnectのバンドルIDが合っているか
  • GameCenterは有効になっているか。
  • Unityエディタでは動かない。実機で動かす。

参考URL

https://smartgames.hatenablog.com/entry/2016/06/01/233048

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog