AppStoreのLeaderBoardを使うと、ゲームのスコアを他のプレイヤーと競えます。
私もUnityで作った物理パズルゲームに、LeaderBoardと連携する機能を追加してみました。
手順としては、
- iTunes ConnectでLeaderBoardの設定をする
- UnityでLeader Boardと連携するコードを追加する
- iPhoneでGameCenterを有効にした状態でアプリを実行して動作確認
と言う順番でやりました。
1つずつ見ていきましょう。
[toc]iTunes Connectでの作業
LeaderBoardの作成
iTunes Connectにログインしてアプリを選択すると上部に「AppStore」「機能」「TestFlight」の3つのタブがあります。
機能タブ→GameCenterを選択します。
ここにLeaderBoardを追加していきます。
「標準」を選択。
日本語にローカライズします。
日本語にして、名前は「ハイスコア」、フォーマットはint、フォーマットサフィックスは「点」にしました。
追加された画面です。
アプリにLeaderboardを追加する
次に、「AppStore」「機能」「TestFlight」の3つのタブからAppStoreを選択し、「Leaderboardを追加」します。
登録が完了しました。
Unityでコードを書く
処理としては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エディタでは動かない。実機で動かす。