Kii Cloudを用いてランキング機能の実装する
「かくれんぼしよう!」のランキング機能を実装するにあたって、Kii Cloudのサービスを利用させていただきました。
Kii Cloudはモバイルアプリ向けサーバーサイド実装不要のクラウドサービスで、Unityにも対応しています。
日本語のリファレンスガイドも充実しています。
今回はランキング機能に使いたいデータのロード、データのセーブ、データの表示という流れを紹介したいと思います。
まずは軽く用語説明などから・・・。
Kii Cloudのサーバ上で複数のデータをまとめたものをBucket言います。
このBucketにデータを格納していく訳ですが、このBucketは3種類のScopeというもので扱われています。
ランキングで使いたいBucketは、その3種類のScope中のApplication Scopeに属したものであると楽ちんです。
Application Scopeに属するデータはすべてのユーザーから読み書きすることができるためです。
(他のScopeにGroup Scope(グループ内のユーザーだけ読み書き可)、User Scope(そのユーザーだけ読み書き可)があり、目的に応じて所属先を決めることができるようになっています。)
ここからは実際のコードになります。
もうすでにログインは済んだ状態として扱います。
using UnityEngine; using System.Collections; using KiiCorp.Cloud.Storage; int nGAME; int nWIN; string sNAME; //Kii Cloud上のデータ保存枠を初期化 void kiiDataInitialize() { //Application Scopeに所属するBucketを定義 KiiBucket appBucket = Kii.Bucket("appData"); KiiObject Dataobj = appBucket.NewKiiObject(); //保存するデータを定義 Dataobj["GAMENUM"] = 0;//総試合数 Dataobj["WINNUM"] = 0;//勝利数 Dataobj["PLAYERNAME"] = "";//プレイヤー名 //オブジェクトを保存 try { Dataobj.Save(); } catch(System.Exception e) { Debug.LogError("Error:" + e); } } //保存されているデータを読み込み void loadKiiData() { string userId = KiiUser.CurrentUser.ID;//ログイン中のユーザーIDを取得 KiiQuery query = new KiiQuery(KiiClause.Equals("_owner", userId));//IDが一致するオブジェクトを検索 bucket.Query(query, (KiiQueryResult<KiiObject> result, System.Exception e) => { if (e != null) { Debug.Log("Error:" + e); return; } foreach (KiiObject obj in result) { //データを読み込み nGAME = (int)obj["GAMENUM"]; nWIN = (int)obj["WINNUM"]; sNAME = (string)obj["PLAYERNAME"]; } }); } //現在のデータの保存 public static void saveKiiData() { string userId = KiiUser.CurrentUser.ID;//ログイン中のユーザーIDを取得 KiiQuery query = new KiiQuery(KiiClause.Equals("_owner", userId));//IDが一致するオブジェクトを検索 bucket.Query(query, (KiiQueryResult<KiiObject> result, System.Exception e) => { if (e != null) { Debug.Log("Error:" + e); return; } foreach (KiiObject obj in result) { //データを保持 obj["GAMENUM"] = nGAME; obj["WINNUM"] = nWIN; obj["PLAYERNAME"] = sNAME; obj.Save(); } }); } //勝利数が多い順に表示 void displayRankData() { KiiBucket bucket = Kii.Bucket("appData"); KiiQuery query = new KiiQuery(); //WINNUMの値が高い順に10件取得 query.SortByDesc("WINNUM"); query.Limit = 10; bucket.Query(query, (KiiQueryResult<KiiObject> result, System.Exception e) => { if (e != null) { Debug.Log("Error:" + e); return; } foreach (KiiObject obj in result) { //データ表示 Debug.Log("プレイヤー名:"+obj.GetString("PLAYERNAME")); Debug.Log("勝利数:"+obj.GetInt("WINNUM")); Debug.Log("総試合数:"+obj.GetInt("GAMENUM");); } }); }
Application Scopeにログイン中のユーザーのデータを保存するときは、ユーザーIDが一致するオブジェクトを指定しないと全てのユーザーのデータを上書きしてしまうことになるので注意が必要です。
オブジェクトの検索をさまざまな条件付けで行えるので、それを利用してランキング機能などを実装することができます。
Unity5オンラインゲーム開発講座 クラウドエンジンによるマルチプレイ&課金対応ゲームの作り方 (Smart Game Developer)
- 作者: 鳥山明純
- 出版社/メーカー: 翔泳社
- 発売日: 2015/09/04
- メディア: 大型本
- この商品を含むブログ (3件) を見る
Unityによるオンライン対戦ゲーム作りの流れがチャプター構成でわかりやすく説明されています。
ここまで具体的にUnityでのオンライン対戦ゲームの作り方を学べる本はまだあまりないのではないかと思うので、お勧めです。