進捗
オンラインランキング機能の粗動作確認と不具合修正を行った。
ハイスコア更新時に自分の更新後のスコアが表示されること。別のアカウントで登録したスコアと並んでリーダーボードに表示されることを確認した。また、リーダーボードのUIの改善としてアバターのアイコンを表示するように変更した。
リーダーボードが正しく更新されない問題
昨日の状態から上記の動作確認を行ったところ、ハイスコアが更新されない。別のアカウントで登録したはずの結果が表示されない。なんなら自分で送信したはずの自分のスコアが表示されないといった事象に遭遇した。
原因としてはGPGSを利用するためのUnityのプラグインからGoogle提供のAndroidゲームサービスライブラリを呼び出すあたりに問題があるらしく、一度読み込んだリーダーボードの内容を長期間キャッシュし、それをずっと参照し続けてしまうようだった。恐ろしいことにアプリを再インストールしてもリーダーボードが更新されなかったため、キャッシュはTempフォルダ等のストレージ上に作成したまま自然消滅するまで残しっぱなしとかにしているのかもしれない。
今回の問題の参考:https://github.com/playgameservices/play-games-plugin-for-unity/issues/1534
修正内容としては上記URL内のコメントにある通り、リーダーボードの取得リクエストを頻繁に送らないようアプリ側で制限処理を加えた上で、Unityプラグイン内のAPIを呼び出す部分にforceReloadの引数を加え、キャッシュを参照しないように変更した。
なお、今回使用しているプラグインはGoogle Play Games plugin for Unityのv0.11.1で、修正対象はAndroidClient.csのLoadScores()メソッド。
変更前
using (var task = client.Call<AndroidJavaObject>(loadScoresMethod
,leaderboardId, AndroidJavaConverter.ToLeaderboardVariantTimeSpan(timeSpan), AndroidJavaConverter.ToLeaderboardVariantCollection(collection), rowCount))
変更後
using (var task = client.Call<AndroidJavaObject>(loadScoresMethod
,leaderboardId, AndroidJavaConverter.ToLeaderboardVariantTimeSpan(timeSpan), AndroidJavaConverter.ToLeaderboardVariantCollection(collection), rowCount, true))
この修正を行った上で再度動作確認を行い、ハイスコアが更新されることを確認できた。
また、この修正の後は別アカウントで送信したスコアが表示されない問題が出てしまい小一時間程度悩んだが、これについては単純にPlayゲームの設定で自分のスコアの公開範囲を「非公開」にしたままだったことが原因で、「一般公開」に変更することで表示されるようになった。
Android版については問題はあったもののひとまず動作確認できたので、次はiOS版でリーダーボードの表示を確認したいと思う。
残作業
- オンラインランキング機能の試作(続き)
- 実績機能の試作
- クリア画面の共有機能
- ゲームの説明シーン(チュートリアル)作成
- 音声をつける
- 広告の実装
- プライバシーポリシー作成
- プロモーションの作成
- リリース
その他所感
UnityEditor上からではGooglePlayやAppleのゲームセンターへアクセスできないことからオンラインランキング機能の動作確認は実機で行っているが、Editor上でのデバッグ作業に比べてビルドに時間がかかるのですごく効率が悪い。その上で今回のようなプラグイン内を修正しなければならない不具合が出てしまったので、あんまりこういう機能を付けない方がいいのかと思ってしまった。
実機での動作確認は残り実績機能と共有機能、広告の実装で行う予定。実機での動作確認は上記の通り面倒なことが多いので極力減らしたいが、Editor上ではどうにも確認できない部分があるのでやむおえずといったところ。Editor上でデバッグできる機能に比べるとやはり進みが圧倒的に遅いし作業もだらだらやる事になりがちだが、それらさえ終わればその他は比較的楽という気持ちを持って何とかモチベーションを維持したい。
EasyMobileがサポートしているのがGPGSだったので、それに従い今回はGPGSで作っているが、サーバサイドはFirebaseを使うなどの選択肢も人気がありそうなので、そちらの方がいっそ使いやすいとかあるのかもしれない。