この記事でのバージョン
Unity 5.2.2f1 Personal
はじめに
今回はUnityで開発したiOSアプリに
ランキングとアチーブメント(実績)機能を実装する方法のご紹介です。
なお、タイトル通りネイティブプラグインは書きません。
UnityEngine.SocialPlatforms
ネイティブプラグイン書かないで、どうやってネイティブの機能使うの?って話ですが、
実はUnityには標準でランキング周りのAPIが用意されています。
using UnityEngine.SocialPlatforms; を書く事でこれらの機能が使えるようになります。
iOSRankingUtility
ではさっそく、プログラムです!
ランキング周りの処理を行う便利クラス、iOSRankingUtilityを作ってみたでこれのご紹介!
これを使えば、認証からスコア&アチーブメントの送信から確認まで出来ちゃいます!
続いて、コードの内容と使い方のご説明をば。
使うだけならiOSRankingUtilityが書いてある方だけ読めば大丈夫なはずです(:3っ)∋〜
認証
まずは認証ですが、以下のようにAuthenticateを実行するだけです!
これでGameCenterにIDがあればそのままログイン、無ければログイン用のウィンドウが表示されます。
//Action<bool> callBack
Social.localUser.Authenticate (callBack);
iOSRankingUtilityを使う時は以下の通り、
//コールバックなし
iOSRankingUtility.Auth();
//コールバックがある場合(Action<bool> callBack )
iOSRankingUtility.Auth(callBack);
また、認証の後にShowDefaultAchievementCompletionBannerを使って
アチーブメント獲得時に上から出てくる通知を有効にしています。
//アチーブメント獲得時の通知をONにする UnityEngine.SocialPlatforms.GameCenter.GameCenterPlatform.ShowDefaultAchievementCompletionBanner(true);
ランキング
次にランキングにスコアを送信する時はSocial.ReportScoreを使います。
//string leaderboardID, long score, Action<bool> callBack
Social.ReportScore (score, leaderboardID, callBack);
iOSRankingUtilityを使う時は以下の通り、
//コールバックなし
iOSRankingUtility.ReportScore(leaderboardID, score);
//コールバックがある場合(Action<bool> callBack )
iOSRankingUtility.ReportScore(leaderboardID, score, callBack);
leaderboardIDはiTCから確認できます。
また、ランキング一覧(リーダボード)を表示する時はSocial. ShowLeaderboardUIを使います。
Social.ShowLeaderboardUI();
iOSRankingUtilityを使う時は以下の通り、
iOSRankingUtility.ShowLeaderboardUI();
アチーブメント
最後にアチーブメントを送信する時はReportProgressを使います。
ランキングの時とは違い、Socialクラスから直接送信するのではなく、
IAchievementというアチーブメントのインスタンスを作成し、
そのインスタンスから送信を行います。
//アチーブメントのインスタンスを作成し、keyと進捗率を設定 IAchievement achievement = Social.CreateAchievement(); achievement.id = achievementKey; //string achievement.percentCompleted = percent; //float //送信 achievement.ReportProgress(callBack); //Action<bool> callBack
iOSRankingUtilityを使う時は以下の通り、
//コールバックなし
iOSRankingUtility.ReportProgress(achievementKey, percent);
//コールバックがある場合(Action<bool> callBack )
iOSRankingUtility.ReportProgress(achievementKey, percent, callBack);
一応、上記のコードでアチーブメントが達成出来る事は確認したのですが、
送信に失敗することが結構あります。
もしかしたら、以下のバグが残っているのかもしれません。
何回か送信するば問題ないっぽいですが、
万全を期す場合はネイティヴプラグインを書きましょう>_('ω' 」)_
また、アチーブメント一覧を表示する時はSocial.ShowAchievementsUIを使います。
Social.ShowAchievementsUI();
iOSRankingUtilityを使う時は以下の通り、
iOSRankingUtility.ShowAchievementsUI();
今回のiOSRankingUtility内にはありませんが、獲得したアチーブメントをリセットする時は
ResetAllAchievementsを使います。
//全アチーブメントを未取得に戻す
UnityEngine.SocialPlatforms.GameCenter.GameCenterPlatform.ResetAllAchievements();
おわりに
GameCenterはUnityが対応してるおかげでだいぶ楽に実装できますね。
これに比べてAndroidの方はちょっと……、という事で次回はAndroid編!
楽するために有料アセットをつかったので参考になるかは分かりません!!
追記:続編書きました!
Android編
まとめ編