進捗
タイトルシーンにオンラインランキング画面を追加。難易度ごとにリーダーボードを作成し、クリア時のスコアをアップロードする仕組みとした。一番下には自分のスコアが表示される。↓画面イメージ。
今日のところはAndroid向けビルドでGoogle Play ゲームサービスへ接続し、ランキングのデータを取得して画面に反映させるところまで進めた。これに関する残り作業はざっくりと以下の通り。明日以降に進めようと思う。
- 複数ユーザのスコア登録と表示の動作確認(今のところ1名しか表示してない)
- 100位以下になったとき自分のスコアが表示されるか確認。
- iOS向けの実装
Easy Mobile Proについて
今後の開発を効率化するためにオンラインランキングの実装にはアセットのEasy Mobile Proを使用した。
英語ではあるものの公式のユーザーガイドが充実しているのと、有名なツールなので調べれば日本語で使い方を解説しているブログも多いので作業を進めやすかった。こういった開発支援を行うアセットについてあまり調べていなかったため、開発途中で導入する形となったが、時にはモバイルゲームの開発には必須といわれるほど多くの機能がついており、非常に有用なツールらしいので、今後の開発では最初から入れる前提で企画等考えたいと思う。
まだオンラインランキングの実装に使っただけでその他の機能に触れていないため、全体の機能数を考えれば一部でしかないと思うが、今日やった作業だけでもPlayゲームサービスへの接続・通信、登録されているスコア・ユーザ情報の取得、AndroidとiOSで分けて書かなければならない処理もアセットが提供するAPIを叩けばOK。といった具合に実現できたので、その部分だけでも恩恵は大きいと思った。
以下、個人的に詰まったところ。
- ログインに必ず失敗する問題
- スコアが一度に30件までしか取れない。
ログインに必ず失敗する問題
起きたこと
オンラインランキング機能について一通り実装し、いざ実行した時、最初こそPlayゲームサービスにログインするアカウントを選択するためのダイアログが表示されたものの、2回目以降そういったダイアログを出すことなく、必ずログインエラーするようになってしまった。
原因
結論としてはEasy MobileのGAME SERVICESでクライアントIDの設定ができていなかった。Google Playゲームサービスで認証を行うため、GCPにてOAuthクライアントを作成し、この時生成したクライアントIDをEasy Mobile Proの↓の画像の欄に入力した上でセットアップを行う必要があった。が、Playゲームサービスの方でアプリ追加を先に行い、GCPの設定作業と並走してしまったためにうっかり入れ忘れてしまったのが主な原因。また、下記の欄に入力したクライアントIDがセキュリティの都合でそういう仕様になっているのかバグなのかはわかっていないが、Unityの再ビルドが走るとインスペクタから入力した文字列が消えてしまうため、なおさら気づきにくかった。
最終的には上記の作業をやり直すことで解決したが、行き詰っている最中にPlayゲームサービスでテストユーザーの追加作業も進めたため、これもやっておかないとやはりログインに失敗すると思われる。(公式のドキュメントにそう書かれているので)。この辺次やるときも何か躓きそうなのでよく手順を確認しておきたい。
スコアが一度に30件までしか取れない。
起きたこと
リーダーボードからのスコア取得時にエラー値が返却されデータを取得できない。
原因
APIの仕様により一度に30件までしかデータを取得できない。1位から100位までを一覧表示する仕様としたかったため、APIの取得件数を指定する引数に100を渡していたが、30件以上は無理とのことだった。エラーメッセージにそのまま書いてあったのですぐ気づくことができたが、30件取得→リストに追加→30件取得→・・・→最後に100検分マージして表示。という具合に作りこみが必要だった。幸い、APIの仕様的にリクエストとレスポンス受信が1セットでキューイングされるとのことで、1フレーム内で複数回APIを叩いた場合も1回目のリクエスト→1回目のレスポンス受信→2回目のリクエスト→・・・というように同期的に順序制御を行ってくれるようだったので、非同期通信にありがちな面倒なタイミング制御等は考慮せずに済んた。
行き詰ったというよりAPIの仕様により工夫が必要となり、実装量が増えたのでその備忘録。
残作業
- オンラインランキング機能の試作(続き)
- 実績機能の試作
- クリア画面の共有機能
- ゲームの説明シーン(チュートリアル)作成
- 音声をつける
- 広告の実装
- プライバシーポリシー作成
- プロモーションの作成
- リリース
その他所感
Unityの使い勝手がよくわかっていなかったので自分でゴリゴリプログラミングしている部分が多かったが、多少プログラミングが得意だからと言って自前でやろうとすると結局時間がかかってしまうことが多いので、今回導入したEasy Mobile Proのような便利系のツールのやらアセットやらの使い方を覚えていった方が開発効率的には圧倒的に良さそうだと思った。
今回オンラインランキングの導入をやりたかったので入れた形だがその他にも広告やシェアリングの機能も入っているのでそれらもEasy Mobile Proを使ってやってみたいと思う。