今回はニフクラ mobile backend のサンプルプロジェクト「シューティングゲームにランキングとゴースト機能を追加」からランキング表示を行うシーン LeaderBoard を改造します。
ニフクラ mobile backend は富士通クラウドテクノロジーズ株式会社が提供するスマートフォンアプリでよく利用される汎用的な機能をクラウドから提供するサービス。
ニフクラ mobile backend の公式サイトにはサービスの使用方法のドキュメントやサンプル、チュートリアルが用意されています。
Unity サンプル&チュートリアル一覧 ニフクラ mobile backend
Text (Script)コンポーネントの設定はこのように設定。
プレイヤーの名前とスコアを表示するUIテキストを作成します。
[Hierarchy]ウィンドウ > [Create] > UI > Text を選択。名前を Text Top0 に変更。
[Inspector]ウィンドウ > Rect Transform コンポーネントはこのように設定。
Text (Script)コンポーネントの設定はこのように設定。ゲーム実行中はサーバーから呼び出されたデータを表示しますが、レイアウトのためにダミーテキストを入力しておきます。
スコア表示のUIオブジェクト名はスクリプトから参照するので連番名とし、Text Top0~Text Top4まで5つ作成します。
Image (Script)コンポーネントをこのように設定。
Button (Script)コンポーネントをこのように設定。
ここまでの手順で一通り必要なUIオブジェクトができました。[Scene]ウィンドウで見るとこのようになっています。
レイアウトが確認できたら Text Top0~Text Top4 の Text (Script)コンポーネント > Text フィールドに入力していた文字はすべて削除しておきます。
変更したコードはこのようになります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// シーン処理のクラスを使用する宣言
using UnityEngine.SceneManagement;
// UI処理のクラスを使用する宣言
using UnityEngine.UI;
public class LeaderBoardManager : MonoBehaviour
{
// スクリプト LeaderBoard を格納する変数
private LeaderBoard lBoard;
// ランキングテキストオブジェクトを格納する配列
private GameObject[] top = new GameObject[5];
// サーバーのスコア取得読み込み判定フラグ
bool isRankFetched;
// スコア表示判定フラグ
bool isLeaderBoardFetched;
// ボタンが押されると対応する変数がtrueになる
private bool backButton;
// ゲーム開始時の処理
void Start()
{
// スクリプト LeaderBoard を変数 lBoard に格納
lBoard = new LeaderBoard();
// 繰り返し処理(5回)
for (int i = 0; i ().text = i + 1 + " . " + lBoard.topRankers[i].print();
}
// スコア表示判定フラグ を true に設定
isLeaderBoardFetched = true;
}
}
// UIボタンクリック時の処理
public void OnClick()
{
// シーン Stage をロードする
SceneManager.LoadScene("Stage");
}
}
最後に、[Hierarchy]ウィンドウ > GUITextLeaderBoard は不要になったので削除します。
ゲームオーバーになってスコア登録画面でスコアを確認してから[Sublit]ボタンクリックでリーダーボードが表示されますが、スコアがTOP5にもかかわらずランキングに表示されない場合があります。
スコアをサーバーに登録する処理と取得する処理のタイミングの問題だと思いますが、具体的な内容を調べて修正する予定です。
今回の内容をWebGLでビルドしてみました。サウンドはミュートしています。
画像クリックで再生(ファイルサイズ:約7MB)