ハイスコアランキング機能を作る
概要
このページでは、データストアに保存されたハイスコアを使って、ハイスコアランキングを実装する方法を学びます。ランキングは、全体の上位5件を表示したものと、自分の周囲だけを表示したものの2つを実装しましょう。下の画像が完成のイメージ図です。
なお、ログイン機能とハイスコアのサーバー管理機能を実装していない場合は、「ログイン機能を作る」「ハイスコアをサーバーに保存する」を先に済ませておいてください。
シーンファイルのダウンロード
ログイン画面実装時と同様に、今回もランキング表示画面とメインゲーム画面をそれぞれ別のシーンに分けて実装していきます。
下記リンクから、ランキング画面を実装するシーンファイルをダウンロードします。ダウンロードした「LeaderBoard.unity」を、プロジェクトの「Scenes」フォルダにドラッグしてコピーしてください。
LeaderBoardシーンのダウンロード
シーンのコピーが完了したら、Unityの File → Build Settingsを開き、今コピーしたシーンを「Scenes In Build」に追加(ドラッグ&ドロップ)してください。
このシーンには、既に以下のものが実装されています。
- 各種見出しGUITextオブジェクト
- 順位とプレイヤー名、スコアを表示するGUITextオブジェクト
このページでは、以下の内容を実装していきます。
- メインシーン(Stage.unity)とランキングシーン(LeaderBoard.unity)を切り替える機能
- mobile backendと通信してハイスコアを取得し、ランキングとして表示する機能
メインゲーム画面とランキング画面を切り替える
Manager.csを開き、OnGUIメソッド内を以下のように編集してください。
これで、タイトル画面の「Leader Board」ボタンを押すとランキングシーンが表示されるようになります(ただし中身は空の状態)。
mobile backendに接続してランキングを取得する機能を作る
つづいて、mobile backendからハイスコアを取得して、ランキングデータを作る機能を実装しましょう。
HighScoreクラスと同様、今回のクラスもMVCデザインでいうモデルクラスにあたるので、Unityに依存しない形でコードを書き、ゲームオブジェクトにアタッチしないで使います。
Scriptsフォルダの中に「LeaderBoard.cs」という名前のC#スクリプトを新規作成し、下記の内容を記述してください。
順に解説します。まずfetchRankメソッドでは、現在の自分のハイスコア「より大きい」スコアを持つレコードをWhereGreaterThanメソッドで検索し、CountAsyncメソッドでその数を取得しています。たとえば自分より大きいスコアが3人いたら、自分は4位だということがわかります。
次にfetchTopRankersメソッドでは、OrderByDescendingメソッドでスコアを降順にしつつ、Limitプロパティを5に設定することで、スコアの高い上位5人だけを取得しています。取得した5件のレコードをHighScoreクラスのListとして保存します。
fetchNeighborsメソッドでは、先述した降順並び替えとLimitの設定に加えて、現在の自分の順位によってSkipプロパティを設定することで、自分の周囲5件だけを取得しています。このように、SkipやLimit、ソートの指定によって、様々なデータの取得が可能です。詳しくはSDKリファレンスをご覧下さい。
HighScoreクラスを拡張する
今回はランキングを、「HighScoreクラスを5つ含んだList」という形で実装しました。そこで、HighScoreクラスに「自分のプレイヤー名とハイスコア」を文字列として出力させるメソッドを追加しましょう。
HighScore.csを開き、以下のメソッドを追加してください。
ランキングを画面に表示する機能の実装
最後に、ランキング画面に遷移したらランキングの取得を開始し、読み込みが完了したら画面に表示する機能を実装しましょう。
LeaderBoardシーンに「LeaderBoardManager」という名前で空のオブジェクトを作成し、同名のスクリプトを新規作成・アタッチしてください。その後、スクリプトを以下の内容に編集してください。
Startメソッドでハイスコアの取得を開始し、ハイスコアの取得が終わったら自分の順位の取得を開始し、それが終わったらランキングの取得を開始しはじめます。それぞれの取得はAsync系のメソッド、つまり非同期に行われるので、処理の終了をフラグで判断し、同期処理化しています。ランキングの取得まで終わったら、GUITextに順位とプレイヤー名、スコアを表示しています。
OnGUIとdrawMenuメソッドでは、いつものようにボタンの描画と画面遷移を行っています。
動作確認
おつかれさまでした!以上でハイスコアランキング機能の実装が完了しました。LogInシーンを開いてゲームを実行し、ランキングが表示されることを確かめましょう。事前に5人以上プレイヤーを作ってスコアを登録しておくとよいでしょう。
- ボタンを押すことでランキング画面とメインゲーム画面を移動できる
- トップ5のスコアが表示されている
- 自分の前後2件のスコアが表示されている
お探しの内容が見つからなかった場合はユーザーコミュニティ
もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。