この記事では、UnityでGameCenter連携の方法を解説していきたいと思います。
GameCenterとは?
GameCenterというのは、iOS限定の機能で、AppleIDを持っている「全世界のプレーヤー」、「友達(連絡先の知り合い)」とゲームのスコアを競い合えるプラットフォームです。
友達と記録ゲームを競い合う時にとても便利なツールです。
今回は、そんなGameCenterをUnityのアプリへ組み込む方法をご紹介していきたいと思います。
実装方法
実装方法としては、大きく分けて以下の2ステップあります。
- AppStoreConnectにて登録する
- コーディング
- GameCenter認証
- スコアボード画面の表示
- スコアの更新
それぞれ実装方法を解説していきたいと思います。
1. AppStoreConnectにて登録する
App Store Connectで、MyAppから登録したいアプリの画面を開いてください。

①サービスを選択
②Leaderboardのプラスボタンをクリック

今回は、標準Leaderboardを選択します。

| 項目名 | 入力内容 |
|---|---|
| ①Leaderboardの参照名 | このLeaderboardの参照名を入力します。 何のスコアなのかを記載しましょう。例えば、初級、中級、上級があるなら初級のスコアなのか中級のスコアなのかというのがわかるようにしましょう。 |
| ②Leaderboard ID | このLeaderboardのIDを入力します。 基本的に参照名を小文字のみにするだけで良いかと思います。 |
| ③スコアのフォーマットタイプ | 小数点を含まないポイントならInteger、タイムなら、To the MinuteやTo the Secondみたいな感じでスコアにあったフォーマットを選択してください。 |
| ④スコア送信タイプ | ベストスコアなのか、最新スコアなのかを選択します。 基本的にベストスコアかと思います。 |
| ⑤並び替え順序 | 点数が大きいほうが良いなら、降順で、タイムとかで早い方が良いなら、昇順です。 |
| ⑥スコアの範囲 | 大体のスコアの範囲を入力します。オプションなので記載しなくてもOKです。 |

①言語の追加をクリック
| 項目名 | 入力内容 |
|---|---|
| ②言語 | 言語を選択してください。 日本だけならJapaneseで良いかと思います。 |
| ③ベストスコア | この記録の名前を入力してください。 |
| ④スコアのフォーマット | スコアにあった、表示するフォーマットを選択してください。 |
| ⑤スコアのフォーマットサフィックス | スコアの単位を記載してください。 |
⑥入力したら保存をクリック

入力項目をしっかりと確認して保存ボタンをクリック

①App Storeのタブを選択
②バージョンをクリック(リリース済みの場合は新しく作る)
③Game Centerにチェックを入れる

①先ほど登録したものを選択する。
②完了をクリック
これで、AppStoreConnectの設定は完了です。あとはコーディングしていきましょう。
2. コーディング
ここからはアプリそれぞれ書く場所が違うため、色々と考えて対応していかなければなりません。
コーディングする箇所は以下の3か所あります。
- GameCenterの認証
- スコアの更新
- スコアボード画面の表示
GameCenterの認証は、最初に表示される画面に記載してください。
スコアの更新は、スコアを保存する時に記載してください。
スコアボードの画面の表示は、スコアボタンなどを用意して、そのアクションに記載してください。
GameCenter認証のサンプルコード
以下のサンプルコードは、一番最初に表示するSceneに、Create EmptyでLeaderBoardという名前のオブジェクトを追加して、そのオブジェクトに以下のコードをアタッチしてください。
using UnityEngine;
using UnityEngine.SceneManagement;
public class LeaderBoard : MonoBehaviour
{
public static LeaderBoard instance = null;
void Start()
{
if (instance == null)
{
instance = this;
}
// xxxSceneの部分に、一番最初の画面のシーンを記載する
if (SceneManager.GetActiveScene().name == "xxxScene")
{
userAuth();
}
}
public void userAuth()
{
Social.localUser.Authenticate(processAuthentication);
}
private void processAuthentication(bool success)
{
if (success)
{
Debug.Log("認証成功");
}
else
{
Debug.Log("認証失敗");
}
}
}
スコアの更新のサンプルコード
スコア更新する処理のところで、こちらの関数にスコアを渡してください。
public void SendScore(int score)
{
Social.ReportScore(score, leaderBoardId, success => {
if (success)
{
Debug.Log("スコア送信成功");
}
else
{
Debug.Log("スコア送信失敗");
}
});
}
スコアボード画面の表示のサンプルコード
スコア画面へ遷移するボタンを用意し、ボタン押下時に以下の関数を呼びましょう。
ボタンを使ったやり方に関しては以下の記事が参考になるかと思います。
※using UnityEngine.SceneManagement;のインポートを忘れずに。
Social.ShowLeaderboardUI();
実機で確認
実装後は、実機で確認しましょう。

このように全世界の人たちとスコアが共有できるようになっているはずです。
参考文献

