Tips

UnityでKii Cloudを使ってハイスコアランキングを作ろう!#4 ランキング作成編
2016.11.21

UnityでKii Cloudを使ってハイスコアランキングを作ろう!#4 ランキング作成編

UnityでKii Cloudを使ってハイスコアランキングを作ろう!#4 ランキング作成編


前回に引き続き、Unityでハイスコアランキングとか手軽に実装してみたい!
という方向けに、Kii Cloud を使用したデータの保存と検索機能の実装について紹介してきます。

今回は一応の最終回、ランキング作成編です。
KiiCloud からのデータ検索とソートについてスクリプトメインで解説していきます。

※使用しているUnityのバージョンは5.3.4です。
[Unity_317×90]

Kii Cloud からデータを検索・ソートしてランキングを作成する


■Kii Object の検索

Bucket内のObjectは、条件を指定して検索して取得することができます。
検索には、KiiQueryクラスを使用します。

■KiiQueryクラス

クエリー(query)とは、「問い合わせ」の意で使用される、データベースに対する処理要求などを指す言葉です。
KiiBucketからオブジェクトを検索する場合、以下のようにKiiQueryクラスのインスタンスを生成します。

    KiiQuery query = new KiiQuery();

上記の様に生成したインスタンスは、検索条件を指定していないため、対象Bucket内の全てのObjectがマッチするクエリーとして扱われます。
KiiQueryクラスには、検索結果をソートするメソッドと、取得する検索結果の上限数を設定するプロパティが用意されています。
・SortByAscメソッド : 引数に指定したフィールドをキーに昇順にソート
・SortByDescメソッド : 引数に指定したフィールドをキーに降順にソート
・Limitプロパティ : 取得する検索結果の最大数(Best Effort)※最大値は200

    KiiQuery query = new KiiQuery();
    query.SortByDesc("HIGH_SCORE");
    query.Limit = 10;

■検索の実行と検索結果の取得

KiiQuery検索結果は、KiiQueryResultのインスタンスとして返ってきます。
KiiQueryResultクラスはList<T>クラスを継承しているため、List(コレクション)として振る舞います。

    KiiBucket bucket = Kii.Bucket("my_app_data");
    KiiQuery query = new KiiQuery();

    KiiQueryResult&lt;KiiObject&gt; result = bucket.Query(query);

■検索結果の取り出し

検索結果はList型であるため、要素の取り出しにはループ処理を使用します。
検索結果resultをforeachでループさせて、中身の要素を一つずつ取り出して処理します。

    KiiQueryResult&lt;KiiObject&gt; result = bucket.Query(query);

    foreach (KiiObject obj in result) {
        // 処理
    }

■ハイスコアランキングの作成

アプリケーションバケットからデータを全権取得し、ソートして10件に絞ります。
foreach内で文字列を結合してランキング形式で出力します。

	// ハイスコアランキングTop10を表示する
	public static void DispHighScoreRanking() {
		KiiBucket bucket = Kii.Bucket("my_app_data");
		KiiQuery query = new KiiQuery();

		// HIGH_SCOREの降順にソートして、10件取得するようにqueryをセット
		query.SortByDesc("HIGH_SCORE");
		query.Limit = 10;

		int rank = 0;

		bucket.Query(query, (KiiQueryResult<KiiObject> result, System.Exception e) => {
			if (e != null) {
				Debug.Log("ランキングデータの取得に失敗しました" + e);
				return;
			}

			foreach (KiiObject obj in result) {
				//データ表示
				rank++;
				Debug.Log(rank + "位 " + obj["CHARACTER_NAME"] + " ハイスコア:" + obj["HIGH_SCORE"]);
			}

		});
	}

事前にどのようなランキングを作成したいのか計画し、KiiObjectをアプリケーションスコープに格納しておきましょう。
アプリケーションスコープは、全ユーザーがアクセスできるバケットであるため、個人情報などの追加は避けましょう。

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search