GS2-Level

GS2-Level はレベル・経験値機能を提供します。 レベル・経験値機能を GS2 SDK for Unity から利用する手順を解説します。

リソースプールを作成する

GS2マネージメントコンソールの GS2-Level から新しくリソースプールを作成します。

リソースプールは経験値やレベルを持つリソースの情報を保管する場所のようなものです。

../../../_images/step-00014.png

『リソースプールの新規作成』をクリックします。

../../../_images/step-00024.png

リソースプールの名前をつけます。

説明文 にはリソースプールについてわかりやすい説明を記入します。(必須ではありません)

サービスクラス には GS2-Level の性能を設定します。

その他、サービス内のイベントに合わせてカスタムスクリプトを実行したい場合は GS2-Script のスクリプト名を設定します。

レベルテーブルを作成する

作成したリソースプールを選択します。

../../../_images/step-00032.png

下部のタブから『レベルテーブルマスタ』タブを選択し『レベルテーブルの新規作成』をクリックします。

../../../_images/step-00042.png

レベルテーブル名 にはレベルテーブルの名前を設定します。

レベルアップ経験値閾値を設定

レベルテーブルの作成が終わったら、レベルアップの閾値となるレベルアップ経験値閾値を設定します。

作成したリソースプールを選択し、下部のレベルテーブル一覧で作成したレベルテーブルの『詳細』をクリックします。

../../../_images/step-00051.png

下部のタブから『レベルアップ閾値マスタ』タブを選択し『レベルアップ閾値の新規作成』をクリックします。

../../../_images/step-00061.png

レベルアップの閾値となる経験値を入力して『作成』をクリックします。

../../../_images/step-00071.png

この例では 経験値が 0〜99 がレベル1。100〜499 がレベル2。500〜699がレベル3。700〜999がレベル4。1000がレベル5でキャップとなります。

リソースタイプを設定

作成したリソースプールを選択します。

../../../_images/step-00081.png

下部のタブから『リソースタイプマスタ』タブを選択し『リソースタイプの新規作成』をクリックします。

../../../_images/step-00091.png

リソースタイプ名にはリソースタイプの名前を設定します。 全てのリソース(キャラクターレベルやスキルレベル、装備レベル)は1つのリソースタイプ(キャラクター[レア]やキャラクター[ノーマル]、スキル、装備)に属し、デフォルトのレベルキャップなどが適用された状態で経験値・レベルが作成されます。

レベルマスタ情報をエクスポートする

../../../_images/step-00101.png

『マスターデータをエクスポート』をクリックします。

すると、JSON ファイルがダウンロードされます。

レベルマスタ情報を反映する

../../../_images/step-00111.png

『有効なマスターデータ』タブで『マスターデータをアップロード』をクリックします。

../../../_images/step-00091.png

先ほどダウンロードしたJSONファイルをアップロードします。 ここでマスターデータをアップロードすることで、実際にゲームクライアントからアクセスした時にリソースタイプやレベルテーブルが更新されます。

これで、GS2マネージメントコンソールでおこなう準備は完了です。

経験値・レベル機能を実装する

ここからは Unity での実装になります。

まずはログイン処理を実装する必要があります。ログインして Gs2.GameSession を取得するまでの手順は GS2-Auth をご参照ください。

ここからはログインが完了している前提で説明を進めます。

現在の経験値・レベルを取得

gs2.Level.GetByResourceTypeAndResourceId(
            r =>
            {
                    if (r.Error != null) throw r.Error;
        var status = r.Result;
                    Debug.Log("ステータスのID: " + status.Id);
                    Debug.Log("リソースタイプ名: " + status.ResourceType);
                    Debug.Log("リソースのID: " + status.ResourceId);
                    Debug.Log("レベル: " + status.Level);
                    Debug.Log("リソースのレベルキャップ: " + status.LevelCap);
                    Debug.Log("累計獲得経験値: " + status.Experience);
                    Debug.Log("次のレベルになる累計獲得経験値: " + status.NextLevelExperience);
            },
            _session,             // GS2 ログインセッション
    ResourcePoolName,     // リソースプール名
    ResourceTypeName,     // リソースタイプ名
    ResourceId1           // リソースID(キャラクターのIDや装備のIDなど事前にマネージメントコンソールによる登録は不要)
);

gs2.Showcase.GetByResourceTypeAndResourceId() で現在の経験値・レベルを取得できます。

ステータスのIDが分かっている場合は gs2.Level.Get() が使用出来ます。

gs2.Level.Get(
            r =>
            {
                    if (r.Error != null) throw r.Error;
        var status = r.Result;
                    Debug.Log("ステータスのID: " + status.Id);
                    Debug.Log("リソースタイプ名: " + status.ResourceType);
                    Debug.Log("リソースのID: " + status.ResourceId);
                    Debug.Log("レベル: " + status.Level);
                    Debug.Log("リソースのレベルキャップ: " + status.LevelCap);
                    Debug.Log("累計獲得経験値: " + status.Experience);
                    Debug.Log("次のレベルになる累計獲得経験値: " + status.NextLevelExperience);
            },
            _session,             // GS2 ログインセッション
    ResourcePoolName,     // リソースプール名
    StatusId              // ステータスID
);

現在の経験値・レベルを複数まとめて取得

ステータスIDを複数指定してまとめて経験値・レベルを取得出来ます。 キャラクターに関する経験値・レベルが複数存在し、1画面を構成するのにまとめて取得したいときなどに活用出来ます。

gs2.Level.List(
            r =>
            {
                    if (r.Error != null) throw r.Error;
        var statuses = r.Result;
                    Debug.Log("ステータスのID: " + statuses[0].Id);
                    Debug.Log("リソースタイプ名: " + statuses[0].ResourceType);
                    Debug.Log("リソースのID: " + statuses[0].ResourceId);
                    Debug.Log("レベル: " + statuses[0].Level);
                    Debug.Log("リソースのレベルキャップ: " + statuses[0].LevelCap);
                    Debug.Log("累計獲得経験値: " + statuses[0].Experience);
                    Debug.Log("次のレベルになる累計獲得経験値: " + statuses[0].NextLevelExperience);
            },
            _session,                        // GS2 ログインセッション
    ResourcePoolName,                // リソースプール名
    new []{ StatusId1, StatusId2 }   // ステータスIDリスト
);

ステータスIDが分からない場合はステータスIDのリストを省略すると、 ログインしているユーザが所有している全ての経験値・レベルを取得出来ます。

ただし、このリクエストはステータスIDを指定する場合の2倍のクォータを必要とします。

gs2.Level.List(
            r =>
            {
                    if (r.Error != null) throw r.Error;
        var statuses = r.Result;
                    Debug.Log("ステータスのID: " + statuses[0].Id);
                    Debug.Log("リソースタイプ名: " + statuses[0].ResourceType);
                    Debug.Log("リソースのID: " + statuses[0].ResourceId);
                    Debug.Log("レベル: " + statuses[0].Level);
                    Debug.Log("リソースのレベルキャップ: " + statuses[0].LevelCap);
                    Debug.Log("累計獲得経験値: " + statuses[0].Experience);
                    Debug.Log("次のレベルになる累計獲得経験値: " + statuses[0].NextLevelExperience);
            },
            _session,                        // GS2 ログインセッション
    ResourcePoolName                 // リソースプール名
);