概要
UnityでiOSのGameCenterを利用し、リーダーボードの表示とユーザーのスコアを送信する手順を説明します。
プラグインなどは使わず、UnityEngine.SocialPlatformsを使っています。
手順
- iTunes Connectでアプリ登録
- iTunes Connectでリーダーボード登録
- Unityで実装
iTunes Connectでアプリ登録
iOS Developer CenterでAppIDを登録後、iTunes Connectでアプリ登録しリーダーボードを有効にする必要があります。
参考
https://sites.google.com/a/gclue.jp/ios-docs/leader-boardtoachievementno-zuo-cheng
リーダーボードを登録し、登録した任意のリーダーボードIDを利用することになります。
Unityで実装
リーダーボードの表示とスコア登録のために、ひとつのユーティリティクラスにまとめました。
using UnityEngine;
using System.Collections;
using UnityEngine.SocialPlatforms;
public class RankingUtility {
//ユーザー認証
public static void Auth()
{
// 認証のため ProcessAuthenticationをコールバックとして登録
// This call needs to be made before we can proceed to other calls in the Social API
Social.localUser.Authenticate (ProcessAuthentication);
}
// 認証が完了した時に呼び出される
// 認証が成功した場合、サーバーからのデータがSocial.localUserにセットされている
private static void ProcessAuthentication (bool success)
{
if (success) {
Debug.Log ("Authenticated, checking achievements");
} else {
Debug.Log ("Failed to authenticate");
}
}
// リーダーボードを表示する
public static void ShowLeaderboardUI()
{
Social.ShowLeaderboardUI();
}
// リーダーボードにスコアを送信する
public static void ReportScore (long score)
{
//このIDは任意の登録したものを使う
string leaderboardID = "score";
Debug.Log ("スコア " + score + " を次の Leaderboard に報告します。" + leaderboardID);
Social.ReportScore (score, leaderboardID, success => {
Debug.Log(success ? "スコア報告は成功しました" : "スコア報告は失敗しました");
});
}
}
利用方法
RankingUtility.Auth();
認証のためにまず最初に実行する。
RankingUtility.ReportScore(long score);
スコアをリーダーボードに送信する。
RankingUtility.ShowLeaderboardUI();
リーダーボードを表示する(モーダルで表示される)。
スコア送信時にリーダーボードを指定しているのに、表示には指定しないのが不思議に思うのは正解で、リーダーボードが複数あればそれを選ぶUIになるようです。
注意事項
- XcodeでGameCenterを有効化にしておく
- iTunesのテストユーザーを使う
- サンドボックスなら自動的に現在のユーザーはログオフされる
- テストユーザーをiTunes Connectから作成しておくこと
参考
Unity公式リファレンスマニュアル ソーシャルAPI
http://docs-jp.unity3d.com/Documentation/Components/net-SocialAPI.html