TapTapTap!!!(37)~実績機能やイベント機能を実装する~では Google Play コンソールで登録した実績やイベント、リーダーボードの機能を実装した。今回は実績やリーダーボードを表示するための UI などを作成する。
1.リーダーボードおよび、実績ボタンを追加する
ボタンの追加方法についてはTapTapTap!!!(1)~画面上にボタンを設置する~に記載しているため省略する。多言語化対応および、Google Play Games ログアウト予定地の間にリーダーボードボタンと実績ボタンを追加した。
2.リーダーボードおよび、実績の処理を追加する
リーダーボードと実績の表示処理作成する。それぞれの処理は以下の通り。
リーダーボードの表示スクリプト
[cce_csharp]using UnityEngine; public class ShowLeaderBoard : MonoBehaviour { /// <summary> /// クリック時にリーダーボードを表示する /// </summary> public void OnClick() { Social.ShowLeaderboardUI(); } }[/cce_csharp]
実績の表示スクリプト
[cce_csharp]using UnityEngine; public class ShowAchievement : MonoBehaviour { /// <summary> /// クリック時に実績を表示する /// </summary> public void OnClick() { Social.ShowAchievementsUI(); } }[/cce_csharp]
それぞれをボタンに登録する。ボタンにスクリプトを登録する方法については、TapTapTap!!!(3)~ボタンをタップして消滅させる~に記載しているため省略する。
また、サインアウトについても似たような処理で作成できるため今回合わせて作成してしまう。スクリプトとしては以下の通り。
[cce_csharp]using GooglePlayGames; using UnityEngine; public class ActionSignOut : MonoBehaviour { /// <summary> /// クリック時にGoogle Play Games からサインアウトする /// </summary> public void OnClick() { PlayGamesPlatform.Instance.SignOut(); } }[/cce_csharp]
3.実機で動作確認を行う
これらの処理は Unity 上で確認を行えないため、実機上で確認を行う。
実機上で確認を行ったところ反応がなかったため、挙動に問題がないかデバッグ用ツールを使って確認を行う。ログの内容については気になる点のみ抽出する
3-1.Unable to find AudioPluginOculusSpatializer 及び libAudioPluginOculusSpatializer
10-02 15:38:15.084: E/Unity(15675): Unable to find AudioPluginOculusSpatializer
10-02 15:38:15.084: E/Unity(15675): Unable to find libAudioPluginOculusSpatializer
Google Play Games のプラグインを調整している間にTapTapTap!!!(33)~デバッグ時に出たエラーを解決する~でインポートしたプラグインまで削除していたようだ。
3-2.WARNING: Creating new PlayGamesPlatform
10-02 15:38:18.332: W/Unity(15675): !!! [Play Games Plugin DLL]
10/02/18 15:38:18 +09:00 WARNING: Creating new PlayGamesPlatform
10-02 15:38:18.332: W/Unity(15675): 10-02 15:38:18.332: W/Unity(15675): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
これは問題無い。新しい PlayGamesPlatform を作ったことを宣言しているのみ。
3-3.Couldn’t find package: com.xiaomi.gamecenter: com.xiaomi.gamecenter
10-02 15:38:19.295: E/UnityAds(15675): com.unity3d.ads.device.Device.isAppInstalled() (line:189) :: Couldn’t find package: com.xiaomi.gamecenter: com.xiaomi.gamecenter
10-02 15:38:19.296: E/UnityAds(15675): com.unity3d.ads.device.Device.isAppInstalled() (line:189) :: Couldn’t find package: com.google.android.gms.maps: com.google.android.gms.maps
10-02 15:38:19.296: E/UnityAds(15675): com.unity3d.ads.device.Device.isAppInstalled() (line:189) :: Couldn’t find package: com.android.telephony: com.android.telephony
Unity の Resolver をインポートして実行することで治るらしいのでインポートしてみる。こちらのサイト参考にさせていただいた。
3-4.ShowLeaderboardUI can only be called after authentication.
10-02 15:38:48.453: W/Unity(15675): *** [Play Games Plugin DLL]
10/02/18 15:38:48 +09:00 ERROR: ShowLeaderboardUI can only be called after authentication. 10-02 15:38:48.453: W/Unity(15675):
10-02 15:38:48.453: W/Unity(15675): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
認証に成功してからでないとリーダーボードを表示できないらしい。解決策についてはこちらのサイトを参考にさせていただいた。
3-5.ShowLeaderboardUI can only be called after authentication.
10-02 15:39:09.540: W/Unity(15675): *** [Play Games Plugin DLL]
10/02/18 15:39:09 +09:00 ERROR: ShowAchievementsUI can only be called after authentication.
10-02 15:39:09.540: W/Unity(15675): 10-02 15:39:09.540: W/Unity(15675): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
3-4.と同様。
4.エラーの解消を行う
リーダーボードの表示と実績の表示を認証に成功してから実行するように修正する。修正内容は以下の通り。
リーダーボードの表示
[cce_csharp]using System.Reflection; using UnityEngine; public class ShowLeaderBoard : MonoBehaviour { /// <summary> /// クリック時にリーダーボードを表示する /// </summary> public void OnClick() { MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name); Social.localUser.Authenticate((bool success) => { Social.ShowLeaderboardUI(); }); MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name); } }[/cce_csharp]
実績の表示
[cce_csharp]using System.Reflection; using UnityEngine; public class ShowAchievement : MonoBehaviour { /// <summary> /// クリック時に実績を表示する /// </summary> public void OnClick() { MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name); Social.localUser.Authenticate((bool success) => { Social.ShowAchievementsUI(); }); MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name); } }[/cce_csharp]
3-3.のエラーについてはUnity の Resolver をインポートして実行することで治るらしい。ということだったが以下のエラーが発生したので、一旦3-3.のエラーについてはペンディングにしておく。
CommandInvokationFailure: Failed to re-package resources.
5.再度実機で検証を行う
表示されないので、もう少し検証が必要だ。