NAV Navbar
Unity UE4/Cocos2d-x
 

GS2-SDK for GameEngine

Game Server Services は 主要なゲームエンジンから利用できるSDKを提供しています。 ゲームエンジン向け SDK では、ゲーム内から利用することにフォーカスして通常の SDK より高レベルなAPI形式で提供しています。

GS2 SDK for Unity

本 SDK 自身は Apache License 2.0 で提供されています。 プログラムのどこかで Apache License 2.0 で提供されているライブラリを使用していることを明示する必要があります。

本 SDK にはパブリックドメインである LitJson(Gs2/Plugin/LitJson.dll) が含まれています。 この dll は GS2 SDK の動作の根幹に関わる動作に利用されているため、削除することが出来ません。

本 SDK には MIT License である websocket-sharp(Gs2/Plugin/websocket-sharp.dll) が含まれています。 表記すべきライセンスは以下です。 https://raw.githubusercontent.com/sta/websocket-sharp/master/LICENSE.txt この dll は GS2 SDK の動作の根幹に関わる動作に利用されているため、削除することが出来ません。

本 SDK には BSD License である protobuf(Gs2/Plugin/Google.Protobuf.dll) が含まれています。 表記すべきライセンスは以下です。 https://github.com/protocolbuffers/protobuf/blob/master/LICENSE この dll は GS2-Realtime を使用しなければ削除することが出来ます。

導入手順

Unity 2019.3 以降をご利用の場合

GS2 SDK for Unity Installer Version 2020.5.1

Unity Editor を起動し、メニューの Import Package から .unitypackage ファイルをインポートします。 その後、Unity Editor のメニューから 『Game Server Services > インストール』 を選択して、ウィザードの指示に従ってください。 インストール完了後、正しく動作しない場合があります。その場合は一度Unity Editorを再起動してみてください。

Unity 2019.2 以前をご利用の場合

GS2 SDK for Unity GitHub

Clone or Download を選択し、ダウンロードしたソースコードをプロジェクト内に配置します。

※ 上記インストーラーを利用する実装は Unity Package Manager を使用して SDK をプロジェクトに追加します。 しかし、 Unity Editor の不具合によって、2019.2 以前では正しく動作しません

Unity Release Note 2019.3.0 Package Manager: Fixed an issue where using some npm registry backends as scoped registries would fail with an error like com.foo.bar: Cannot read property '0.0.1' of undefined. (1177614)

実装上の諸注意

Windows向けにビルドするときはBuildSettingsでx86からx86_64に変更してください。x86ではエラーが出ます。

GS2 SDK for Unreal Engine 4

本 SDK 自身は Apache License 2.0 で提供されています。 プログラムのどこかで Apache License 2.0 で提供されているライブラリを使用していることを明示する必要があります。

本 SDK には Game Server Services 株式会社によってカスタマイズされた以下のソフトウェアが含まれています。

これらは SDK の動作の根幹に関わる動作に利用されているため、削除することができません。 これらのソフトウェアにおける、 Game Server Service 株式会社による改変部分のライセンスは、各ソフトウェアの規定するところに基づき、 Apache License 2.0 で提供されています。 それ以外の部分については、各ソフトウェアのライセンスに従います。 いずれのライセンスも、各ソフトウェアの著作権表示とライセンスの全文を、配布するソフトウェアの複製に含める必要があります。

ダウンロード

GS2 SDK for Unreal Engine 4 Version 2020.3.4

導入手順

SDK のダウンロードパッケージを展開し、ご使用の Unreal Engine 4 プロジェクトに対して、以下の変更を行います。

  1. Plugins ディレクトリ直下に UEWebsocket/Plugins/WebSocket ディレクトリをコピーします。
  2. Source/(プロジェクト名) 以下の任意の場所に gs2-unreal-engine-sdk/gs2 ディレクトリをコピーします。
  3. (プロジェクト名).Build.cs に以下の変更を加えます。
    • PublicDependencyModuleNames に "HTTP" および "WebSocket" を追加します。
      • 例: PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HTTP", "WebSocket" });
    • PublicSystemIncludePaths に GS2 SDK for Unreal Engine 4 の gs2 ディレクトリがある場所を追加します。
      • 例: PublicSystemIncludePaths.Add(System.IO.Path.Combine(ModuleDirectory, "gs2-unreal-engine-sdk/src/"));
  4. (プロジェクト名).uproject のコンテキストメニューから Visual Studio プロジェクトを再生成します。

実装上の諸注意

GS2 SDK for Cocos2d-x

本 SDK 自身は Apache License 2.0 で提供されています。 プログラムのどこかで Apache License 2.0 で提供されているライブラリを使用していることを明示する必要があります。

本 SDK には Game Server Services 株式会社によってカスタマイズされた以下のソフトウェアが含まれています。

これらは SDK の動作の根幹に関わる動作に利用されているため、削除することができません。 これらのソフトウェアにおける、 Game Server Service 株式会社による改変部分のライセンスは、各ソフトウェアの規定するところに基づき、 Apache License 2.0 で提供されています。 それ以外の部分については、各ソフトウェアのライセンスに従います。 いずれのライセンスも、各ソフトウェアの著作権表示とライセンスの全文を、配布するソフトウェアの複製に含める必要があります。

ダウンロード

GS2 SDK for Cocos2d-x Version 2020.3.4

導入手順

SDK のダウンロードパッケージを展開し、ご使用の Cocos2d-x プロジェクトに対して、以下の変更を行います。

  1. プロジェクト直下の CMakeLists.txt に対し、以下の変更を加えます。
    • SDK パッケージの gs2 ディレクトリをサブディレクトリに加えます。
      • 例: add_subdirectory(gs2-cocos2dx-sdk/gs2)
      • これは add_subdirectory(${COCOS2DX_ROOT_PATH}/cocos ${ENGINE_BINARY_PATH}/cocos/core) より下に挿入する必要があります。
    • ターゲット ${APP_NAME} のリンクライブラリに ${GS2_ALL_LIBRARIES} を追加します。
      • 例: target_link_libraries(${APP_NAME} cocos2d ${GS2_ALL_LIBRARIES})

実装上の諸注意

GS2-Account

ゲームにログイン機能を追加したいときに使用します。

デバイスの機種変更時にデータを引き継げるようにするために メールアドレス+パスワード や ソーシャルアカウントを利用したデータの引き継ぎ機能に対応しています。

ゲームプレイヤーアカウント

ゲームプレイヤーアカウント

Account はゲームプレイヤーを特定するためのユーザIDとパスワードを記録します。

EzAccount

パラメータ データ型 必須 説明
userId string true アカウントID
password string true パスワード
createdAt long true 作成日時

create

yield return gs2.Account.Create(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string アカウントID
            Debug.Log(r.Result.Item.Password); // string パスワード
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
        }
    },
    namespaceName,   //  ネームスペース名
);
return client.account.create(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string アカウントID
            // r.getResult()->getItem().getPassword(); // string パスワード
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
        }
    },
    namespaceName,   //  ネームスペース名
);

ゲームプレイヤーを識別するアカウントを新規作成

このAPIの実行に成功すると、作成したアカウントの情報が返ります。 返ったアカウント情報のうち、認証処理に使用するユーザIDとパスワードを永続化してください。

ここで発行されるパスワードはランダム値であり、ゲームプレイヤーの任意の値を指定することはできません。 引き継ぎ設定 としてゲームプレイヤーにとってわかりやすい識別子を登録することができます。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
item EzAccount 作成したゲームプレイヤーアカウント

authentication

yield return gs2.Account.Authentication(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string アカウントID
            Debug.Log(r.Result.Item.Password); // string パスワード
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Body); // string 署名対象のアカウント情報
            Debug.Log(r.Result.Signature); // string 署名
        }
    },
    namespaceName,   //  ネームスペース名
    userId,   //  アカウントID
    keyId,   //  認証トークンの暗号化に使用する暗号鍵 のGRN
    password,   //  パスワード
);
return client.account.authentication(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAuthenticationResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string アカウントID
            // r.getResult()->getItem().getPassword(); // string パスワード
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getBody(); // string 署名対象のアカウント情報
            // r.getResult()->getSignature(); // string 署名
        }
    },
    namespaceName,   //  ネームスペース名
    userId,   //  アカウントID
    keyId,   //  認証トークンの暗号化に使用する暗号鍵 のGRN
    password,   //  パスワード
);

アカウントの認証

create 関数で発行したユーザID・パスワードを使用してゲームプレイヤーの認証を行います。 認証が完了すると アカウント認証情報署名 が発行されます。 アカウント認証情報署名 を GS2-Auth::Login にわたすことで、GS2の各サービスにアクセスするための アクセストークン を得ることができます。 なおこのAPIとGS2-Auth::LoginをひとまとめにしたものがGS2-Profile::Loginではじめかた⇒サンプルプログラムで解説しています。

アカウント認証情報署名 は1時間の有効期限が存在します。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
userId string true アカウントID
keyId string true 認証トークンの暗号化に使用する暗号鍵 のGRN
password string true パスワード
パラメータ データ型 説明
item EzAccount ゲームプレイヤーアカウント
body string 署名対象のアカウント情報
signature string 署名

引き継ぎ設定

引き継ぎ設定

TakeOver はアカウントの引き継ぎ設定を保存します。 引き継ぎ設定とは、メールアドレスやソーシャルメディアのアカウントIDなどゲームプレイヤーを識別するためのIDとパスワードを組み合わせたものです。 異なるデバイスにアカウントを引き継ぐときに入力してもらいます。

引き継ぎに成功した際にアカウントのパスワードを変更する機能があります。 これによって、デバイスの引き継ぎを行ったあと、以前使用していたデバイスからの認証がエラーになるようになります。

EzTakeOver

パラメータ データ型 必須 説明
userId string true ユーザーID
type integer true スロット番号
userIdentifier string true 引き継ぎ用ユーザーID
createdAt long true 作成日時

addTakeOverSetting

yield return gs2.Account.AddTakeOverSetting(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Type); // integer スロット番号
            Debug.Log(r.Result.Item.UserIdentifier); // string 引き継ぎ用ユーザーID
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
    userIdentifier,   //  引き継ぎ用ユーザーID
    password,   //  パスワード
);
return client.account.addTakeOverSetting(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAddTakeOverSettingResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getType(); // integer スロット番号
            // r.getResult()->getItem().getUserIdentifier(); // string 引き継ぎ用ユーザーID
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
    userIdentifier,   //  引き継ぎ用ユーザーID
    password,   //  パスワード
);

引き継ぎ設定 を追加

引き継ぎ設定 は機種変更などを行ったときにアカウントの引き継ぎをできるようにする設定です。 引き継ぎ設定引き継ぎ用ユーザーID引き継ぎ用パスワード の組み合わせで実行できるようにします。

スロット番号 に異なる値を指定することで、1つのアカウントに対して複数の `引き継ぎ設定 を保持できます。 たとえば、スロット番号:0にメールアドレス・パスワード を、スロット番号:1` にソーシャルメディアのID情報を格納するようにし、 ゲームプレイヤーは好みの引き継ぎ手段を選択できるようにする。といった運用が可能です。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
type integer true スロット番号
userIdentifier string true 引き継ぎ用ユーザーID
password string true パスワード
パラメータ データ型 説明
item EzTakeOver 作成した引き継ぎ設定

listTakeOverSettings

yield return gs2.Account.ListTakeOverSettings(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[TakeOver] 引き継ぎ設定のリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.account.listTakeOverSettings(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListTakeOverSettingsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[TakeOver] 引き継ぎ設定のリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

設定されている 引き継ぎ設定 の一覧を取得

ゲームプレイヤーが設定した 引き継ぎ設定 の一覧を取得できます。 設定されている 引き継ぎ用パスワード の値は取得できません。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[TakeOver] 引き継ぎ設定のリスト
nextPageToken string リストの続きを取得するためのページトークン

updateTakeOverSetting

yield return gs2.Account.UpdateTakeOverSetting(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Type); // integer スロット番号
            Debug.Log(r.Result.Item.UserIdentifier); // string 引き継ぎ用ユーザーID
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
    oldPassword,   //  古いパスワード
    password,   //  新しいパスワード
);
return client.account.updateTakeOverSetting(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateTakeOverSettingResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getType(); // integer スロット番号
            // r.getResult()->getItem().getUserIdentifier(); // string 引き継ぎ用ユーザーID
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
    oldPassword,   //  古いパスワード
    password,   //  新しいパスワード
);

<code>引き継ぎ設定</code> のパスワードを変更する

このAPIを経由して 引き継ぎ用パスワード を更新するためには、すでに設定されている 引き継ぎ用パスワード を知っていなければ実行できません。 セキュアな 引き継ぎ設定 の更新を実現したい場合に使用します。

このAPIを使用する際には、 引き継ぎ設定 の削除APIのアクセス権限を剥奪することを忘れないようにしてください。 ゲームプレイヤーが自分の 引き継ぎ設定 の削除するにはパスワードの認証が必要ありません。 削除して再作成することで、実質的に 引き継ぎ用パスワード の変更ができてしまいます。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
type integer true スロット番号
oldPassword string true 古いパスワード
password string true 新しいパスワード
パラメータ データ型 説明
item EzTakeOver 引き継ぎ設定

deleteTakeOverSetting

yield return gs2.Account.DeleteTakeOverSetting(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
);
return client.account.deleteTakeOverSetting(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteTakeOverSettingResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
);

引き継ぎ設定 の削除

設定されている 引き継ぎ設定 を削除します。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
type integer true スロット番号
パラメータ データ型 説明

doTakeOver

yield return gs2.Account.DoTakeOver(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string アカウントID
            Debug.Log(r.Result.Item.Password); // string パスワード
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
        }
    },
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
    userIdentifier,   //  引き継ぎ用ユーザーID
    password,   //  パスワード
);
return client.account.doTakeOver(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDoTakeOverResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string アカウントID
            // r.getResult()->getItem().getPassword(); // string パスワード
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
        }
    },
    namespaceName,   //  ネームスペース名
    type,   //  スロット番号
    userIdentifier,   //  引き継ぎ用ユーザーID
    password,   //  パスワード
);

引き継ぎを実行

指定された 引き継ぎ用ユーザID引き継ぎ用パスワード が一致していた場合、設定されたアカウント情報を応答します。 応答されたアカウント情報から ユーザIDパスワード を永続化して利用してください。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
type integer true スロット番号
userIdentifier string true 引き継ぎ用ユーザーID
password string true パスワード
パラメータ データ型 説明
item EzAccount ゲームプレイヤーアカウント

GS2-Auth

GS2 のサービス上でゲームプレイヤーを識別するAPIキーとなるアクセストークンを発行します。 アクセストークンの発行手段は2種類存在します。

アクセストークンには1時間の有効期限が存在します。 GS2-SDK for GameEngine を使用していればリフレッシュ処理も自動的に行われます。

アクセストークン

アクセストークン

ユーザIDを特定する情報が記録された文字列。 GS2内のすべてのサービスで、ゲームアプリケーション内から直接GS2のAPIを呼び出すときには、ユーザIDを指定する代わりにアクセストークンを使用します。 これはユーザIDを直接指定するようにすると、容易に他人に成りすましできてしまうためです。

アクセストークンには発行から1時間の有効期限があり、永続化したアクセストークンを使い回すことは想定していません。

EzAccessToken

パラメータ データ型 必須 説明
token string true アクセストークン
userId string true ユーザーID
expire long true 有効期限

login

yield return gs2.Auth.Login(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Token); // string アクセストークン
            Debug.Log(r.Result.UserId); // string ユーザーID
            Debug.Log(r.Result.Expire); // long 有効期限
        }
    },
    userId,   //  ユーザーID
    keyId,   //  署名の作成に使用した暗号鍵 のGRN
    body,   //  アカウント認証情報の署名対象
    signature,   //  署名
);
return client.auth.login(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncLoginResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getToken(); // string アクセストークン
            // r.getResult()->getUserId(); // string ユーザーID
            // r.getResult()->getExpire(); // long 有効期限
        }
    },
    userId,   //  ユーザーID
    keyId,   //  署名の作成に使用した暗号鍵 のGRN
    body,   //  アカウント認証情報の署名対象
    signature,   //  署名
);

指定したユーザIDでGS2にログイン

body と signature には GS2-Account::Authentication の結果を指定します。 body と signature の検証に成功すると、 アクセストークン を応答します。 アクセストークン は有効期限が1時間の一時的な認証情報で、GS2内の各サービスでゲームプレイヤーを識別するために使用されます。 なおUnityとCocos2d-x向けにGS2-Account::AuthenticationとこのAPIをひとまとめにしたGS2-Profile::Loginを用意しています。 GS2-Profile::Loginははじめかた⇒サンプルプログラムで解説しています。

パラメータ データ型 必須 説明
userId string true ユーザーID
keyId string true 署名の作成に使用した暗号鍵 のGRN
body string true アカウント認証情報の署名対象
signature string true 署名
パラメータ データ型 説明
token string アクセストークン
userId string ユーザーID
expire long 有効期限

GS2-Chat

テキストベースのチャット機能を提供します。

メッセージデータはルームごとに管理され、過去24時間分のログが保持されます。 ルームにはパスワードを設定でき、設定した場合はメッセージの取得や投稿リクエストにパスワードが必要となります。 ルームにはユーザIDのホワイトリストを設定でき、設定した場合はホワイトリストに含まれるゲームプレイヤーにしかメッセージの取得や投稿ができなくなります。

メッセージにはカテゴリを設定でき、クライアント側でペイロードのパース方法を切り替えることができます。 たとえば、カテゴリ0 はテキストがペイロードにそのまま含まれる。カテゴリ1 はペイロードにスタンプのIDが含まれる。といった使い方ができます。

ルームを購読すれば、ルームに対して新しい投稿があったときにサーバからプッシュ通知を受け取ることができます。 このとき、通知を受けたいカテゴリを設定できますので、メッセージの種類や重要度別にカテゴリを分ければ、ゲームプレイヤーが通知を受け取るメッセージの種類を設定できるようになりユーザ体験を向上させることができます。 また、購読の設定には モバイルプッシュ通知に転送するか という設定もありますので、うまく活用してください。

ルーム

ルーム

メッセージのタイムラインを保持する単位です。 ルームにパスワードを設定することで、メッセージの投稿や取得時にパスワードを要求するようになります。 ルームにはユーザIDのホワイトリストを設定でき、設定した場合はホワイトリストに含まれるゲームプレイヤー以外は投稿や取得ができなくなります。

EzRoom

パラメータ データ型 必須 説明
name string false ルーム名
metadata string false メタデータ

createRoom

yield return gs2.Chat.CreateRoom(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string ルーム名
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    name,   //  ルーム名(オプション値)
    metadata,   //  メタデータ(オプション値)
    password,   //  メッセージを投稿するために必要となるパスワード(オプション値)
    whiteListUserIds   //  ルームに参加可能なユーザIDリスト(オプション値)
);
return client.chat.createRoom(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateRoomResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string ルーム名
            // r.getResult()->getItem().getMetadata(); // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    name,   //  ルーム名(オプション値)
    metadata,   //  メタデータ(オプション値)
    password,   //  メッセージを投稿するために必要となるパスワード(オプション値)
    whiteListUserIds   //  ルームに参加可能なユーザIDリスト(オプション値)
);

ルームの作成

ネームスペースの設定でゲームプレイヤーによるルーム作成が許可されていない場合、失敗します。 ルームにパスワードを設定すると発言する際にパスワードが一致しなければ発言できません。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
name string false ルーム名
metadata string false メタデータ
password string false メッセージを投稿するために必要となるパスワード
whiteListUserIds list[string] false ルームに参加可能なユーザIDリスト
パラメータ データ型 説明
item EzRoom 作成したルーム

getRoom

yield return gs2.Chat.GetRoom(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string ルーム名
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
);
return client.chat.getRoom(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRoomResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string ルーム名
            // r.getResult()->getItem().getMetadata(); // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
);

ルームの取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
roomName string true ルーム名
パラメータ データ型 説明
item EzRoom ルーム

deleteRoom

yield return gs2.Chat.DeleteRoom(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string ルーム名
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
);
return client.chat.deleteRoom(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteRoomResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string ルーム名
            // r.getResult()->getItem().getMetadata(); // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
);

ルームの削除

自分が作成したルームに対してしか実行できません。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
roomName string true ルーム名
パラメータ データ型 説明
item EzRoom 削除したルーム

メッセージ

メッセージ

ルームに投稿するデータです。 カテゴリを設定できますので、カテゴリによってペイロードのパース方法を切り替えたり、投稿の通知を送るかを分岐できます。

EzMessage

パラメータ データ型 必須 説明
roomName string true ルーム名
userId string true 発言したユーザID
category integer true メッセージの種類を分類したい時の種類番号
metadata string true メタデータ
createdAt long true 作成日時

post

yield return gs2.Chat.Post(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.RoomName); // string ルーム名
            Debug.Log(r.Result.Item.UserId); // string 発言したユーザID
            Debug.Log(r.Result.Item.Category); // integer メッセージの種類を分類したい時の種類番号
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    category,   //  メッセージの種類を分類したい時の種類番号
    metadata,   //  メタデータ
    password   //  メッセージを投稿するために必要となるパスワード(オプション値)
);
return client.chat.post(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPostResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getRoomName(); // string ルーム名
            // r.getResult()->getItem().getUserId(); // string 発言したユーザID
            // r.getResult()->getItem().getCategory(); // integer メッセージの種類を分類したい時の種類番号
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    category,   //  メッセージの種類を分類したい時の種類番号
    metadata,   //  メタデータ
    password   //  メッセージを投稿するために必要となるパスワード(オプション値)
);

メッセージを投稿します

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
roomName string true ルーム名
category integer true メッセージの種類を分類したい時の種類番号
metadata string true メタデータ
password string false メッセージを投稿するために必要となるパスワード
パラメータ データ型 説明
item EzMessage 投稿したメッセージ

listMessages

yield return gs2.Chat.ListMessages(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Message] メッセージのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    startAt,   //  メッセージの取得を開始する時間(オプション値)
    limit,   //  データの取得件数(オプション値)
    password   //  メッセージを投稿するために必要となるパスワード(オプション値)
);
return client.chat.listMessages(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMessagesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Message] メッセージのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    startAt,   //  メッセージの取得を開始する時間(オプション値)
    limit,   //  データの取得件数(オプション値)
    password   //  メッセージを投稿するために必要となるパスワード(オプション値)
);

ルーム内のメッセージ一覧を取得

startAt にしていた時刻以降に投稿されたメッセージを取得できます startAt と完全一致するメッセージも対象に含まれます

メッセージは投稿の古いものから順番に取得されます

メッセージは過去1時間分まで遡れます

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
roomName string true ルーム名
startAt long false メッセージの取得を開始する時間
limit long false データの取得件数
password string false メッセージを投稿するために必要となるパスワード
パラメータ データ型 説明
items list[Message] メッセージのリスト

購読

購読

ルームに対する新着投稿をプッシュ通知で知らせてほしいときに設定します。

EzSubscribe

パラメータ データ型 必須 説明
userId string true 購読するユーザID
roomName string true 購読するルーム名
notificationTypes list[NotificationType] false 新着メッセージ通知を受け取るカテゴリリスト

listSubscribeRooms

yield return gs2.Chat.ListSubscribeRooms(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Subscribe] 購読のリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.chat.listSubscribeRooms(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListSubscribeRoomsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Subscribe] 購読のリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

購読しているルームの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Subscribe] 購読のリスト
nextPageToken string リストの続きを取得するためのページトークン

subscribe

yield return gs2.Chat.Subscribe(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string 購読するユーザID
            Debug.Log(r.Result.Item.RoomName); // string 購読するルーム名
            Debug.Log(r.Result.Item.NotificationTypes); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    notificationTypes   //  新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);
return client.chat.subscribe(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSubscribeResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string 購読するユーザID
            // r.getResult()->getItem().getRoomName(); // string 購読するルーム名
            // r.getResult()->getItem().getNotificationTypes(); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    notificationTypes   //  新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);

ルームを購読

ルームを購読することで、そのルームに関する新着メッセージ投稿の通知を受けることができます 購読する際のオプションとして、「メッセージに付加されたカテゴリが特定の値のものだけ通知する」といった設定や 「通知を受けたときにオフラインだった場合、モバイルプッシュ通知に転送する」といった設定ができます。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
roomName string true ルーム名
notificationTypes list[NotificationType] false 新着メッセージ通知を受け取るカテゴリリスト
パラメータ データ型 説明
item EzSubscribe 購読した購読

updateSubscribeSetting

yield return gs2.Chat.UpdateSubscribeSetting(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string 購読するユーザID
            Debug.Log(r.Result.Item.RoomName); // string 購読するルーム名
            Debug.Log(r.Result.Item.NotificationTypes); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    notificationTypes   //  新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);
return client.chat.updateSubscribeSetting(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateSubscribeSettingResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string 購読するユーザID
            // r.getResult()->getItem().getRoomName(); // string 購読するルーム名
            // r.getResult()->getItem().getNotificationTypes(); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
    notificationTypes   //  新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);

購読設定の更新

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
roomName string true ルーム名
notificationTypes list[NotificationType] false 新着メッセージ通知を受け取るカテゴリリスト
パラメータ データ型 説明
item EzSubscribe 更新した購読

unsubscribe

yield return gs2.Chat.Unsubscribe(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string 購読するユーザID
            Debug.Log(r.Result.Item.RoomName); // string 購読するルーム名
            Debug.Log(r.Result.Item.NotificationTypes); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
);
return client.chat.unsubscribe(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnsubscribeResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string 購読するユーザID
            // r.getResult()->getItem().getRoomName(); // string 購読するルーム名
            // r.getResult()->getItem().getNotificationTypes(); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
);

購読の解除

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
roomName string true ルーム名
パラメータ データ型 説明
item EzSubscribe 解除した購読

購読

購読

EzNotificationType

パラメータ データ型 必須 説明
category integer true 新着メッセージ通知を受け取るカテゴリ
enableTransferMobilePushNotification boolean true オフラインだった時にモバイルプッシュ通知に転送するか

v

GS2-Datastore

任意のバイナリデータをサーバに保存する機能を提供します。 アップロードされたデータはアクセス権限管理(ACL - Access Control List)が適用されます。

の3種類のACLが設定できます。

アップロードされたデータは自動的にバックアップが作成され、 データを更新・削除したとしても30日以内であれば復元が可能です。 アップロードされたデータには固有のID(UUID v4)と世代IDが割り当てられ、 データを更新・削除すると世代IDが更新されます。 データをダウンロードする際には世代IDを指定して、具体的なファイルを特定します。

データを更新するのと同時に他プレイヤーがデータにアクセスしようとしたときに 意図せず新しいバージョンのデータを取得しないようにダウンロードリクエストには世代IDを含めることができます。 世代IDをダウンロードリクエストに付加することで、確実にリストアップした時点でのデータをダウンロードすることを保証することができます。

ただし、いつまでも世代の古いデータにアクセスできることは望まないゲームもあるかもしれません。 そのため、データの所有者以外は、更新後60分以内かつ1つ前の世代に限り古い世代のデータをダウンロードを許可するオプションが存在します。

本機能を使用してセーブデータの管理をする際には、不正行為に対する耐性を考えてください。 他のGS2のサービスではゲームの仕様に合わせて加算・減算を自由に行えないようコントロールされています。 しかし、ローカルのセーブデータを信頼することはチート行為の原因となりえます。 GS2の機能が提供されている場合はそちらを優先して使用し、 UGCコンテンツの交換や、コンフィグの設定値など改ざんされても影響が軽微な要素のみを管理するようにしてください。

データオブジェクト

データオブジェクト

EzDataObject

パラメータ データ型 必須 説明
dataObjectId string true データオブジェクト
name string true データの名前
userId string true ユーザーID
scope string true ファイルのアクセス権
allowUserIds list[string] true 公開するユーザIDリスト
status string true 状態
generation string false データの世代
createdAt long true 作成日時
updatedAt long true 最終更新日時

listMyDataObjects

yield return gs2.Datastore.ListMyDataObjects(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[DataObject] データオブジェクトのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    status,   //  状態(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.datastore.listMyDataObjects(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMyDataObjectsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[DataObject] データオブジェクトのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    status,   //  状態(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

データオブジェクトの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
status string false 状態
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[DataObject] データオブジェクトのリスト
nextPageToken string リストの続きを取得するためのページトークン

updateDataObject

yield return gs2.Datastore.UpdateDataObject(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    scope,   //  ファイルのアクセス権
    allowUserIds,   //  公開するユーザIDリスト
);
return client.datastore.updateDataObject(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateDataObjectResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    scope,   //  ファイルのアクセス権
    allowUserIds,   //  公開するユーザIDリスト
);

データオブジェクトを更新

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
scope string true ファイルのアクセス権
allowUserIds list[string] true 公開するユーザIDリスト
パラメータ データ型 説明
item EzDataObject データオブジェクト

prepareUpload

yield return gs2.Datastore.PrepareUpload(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
            Debug.Log(r.Result.UploadUrl); // string アップロード処理の実行に使用するURL
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    scope,   //  ファイルのアクセス権
    allowUserIds,   //  公開するユーザIDリスト
    name,   //  データの名前(オプション値)
    updateIfExists   //  既にデータが存在する場合にエラーとするか、データを更新するか(オプション値)
);
return client.datastore.prepareUpload(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareUploadResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
            // r.getResult()->getUploadUrl(); // string アップロード処理の実行に使用するURL
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    scope,   //  ファイルのアクセス権
    allowUserIds,   //  公開するユーザIDリスト
    name,   //  データの名前(オプション値)
    updateIfExists   //  既にデータが存在する場合にエラーとするか、データを更新するか(オプション値)
);

データのアップロード準備

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
name string false データの名前
scope string true ファイルのアクセス権
allowUserIds list[string] true 公開するユーザIDリスト
updateIfExists boolean false 既にデータが存在する場合にエラーとするか、データを更新するか
パラメータ データ型 説明
item EzDataObject データオブジェクト
uploadUrl string アップロード処理の実行に使用するURL

prepareReUpload

yield return gs2.Datastore.PrepareReUpload(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
            Debug.Log(r.Result.UploadUrl); // string アップロード処理の実行に使用するURL
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);
return client.datastore.prepareReUpload(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareReUploadResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
            // r.getResult()->getUploadUrl(); // string アップロード処理の実行に使用するURL
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);

データの再アップロード準備

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
dataObjectName string true データの名前
パラメータ データ型 説明
item EzDataObject データオブジェクト
uploadUrl string アップロード処理の実行に使用するURL

doneUpload

yield return gs2.Datastore.DoneUpload(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);
return client.datastore.doneUpload(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDoneUploadResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);

データのアップロード完了を報告

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
dataObjectName string true データの名前
パラメータ データ型 説明
item EzDataObject データオブジェクト

prepareDownload

yield return gs2.Datastore.PrepareDownload(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
            Debug.Log(r.Result.FileUrl); // string ファイルをダウンロードするためのURL
            Debug.Log(r.Result.ContentLength); // long ファイルの容量
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectId,   //  データオブジェクト
);
return client.datastore.prepareDownload(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareDownloadResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
            // r.getResult()->getFileUrl(); // string ファイルをダウンロードするためのURL
            // r.getResult()->getContentLength(); // long ファイルの容量
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectId,   //  データオブジェクト
);

データをダウンロード準備

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
dataObjectId string true データオブジェクト
パラメータ データ型 説明
item EzDataObject データオブジェクト
fileUrl string ファイルをダウンロードするためのURL
contentLength long ファイルの容量

prepareDownloadOwnData

yield return gs2.Datastore.PrepareDownloadOwnData(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
            Debug.Log(r.Result.FileUrl); // string ファイルをダウンロードするためのURL
            Debug.Log(r.Result.ContentLength); // long ファイルの容量
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);
return client.datastore.prepareDownloadOwnData(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareDownloadOwnDataResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
            // r.getResult()->getFileUrl(); // string ファイルをダウンロードするためのURL
            // r.getResult()->getContentLength(); // long ファイルの容量
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);

自分のデータをダウンロード準備

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
dataObjectName string true データの名前
パラメータ データ型 説明
item EzDataObject データオブジェクト
fileUrl string ファイルをダウンロードするためのURL
contentLength long ファイルの容量

prepareDownloadByUserIdAndDataObjectName

yield return gs2.Datastore.PrepareDownloadByUserIdAndDataObjectName(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
            Debug.Log(r.Result.FileUrl); // string ファイルをダウンロードするためのURL
            Debug.Log(r.Result.ContentLength); // long ファイルの容量
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    userId,   //  ユーザーID
    dataObjectName,   //  データの名前
);
return client.datastore.prepareDownloadByUserIdAndDataObjectName(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareDownloadByUserIdAndDataObjectNameResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
            // r.getResult()->getFileUrl(); // string ファイルをダウンロードするためのURL
            // r.getResult()->getContentLength(); // long ファイルの容量
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    userId,   //  ユーザーID
    dataObjectName,   //  データの名前
);

ユーザIDとデータ名を指定してデータをダウンロード準備

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
userId string true ユーザーID
dataObjectName string true データの名前
パラメータ データ型 説明
item EzDataObject データオブジェクト
fileUrl string ファイルをダウンロードするためのURL
contentLength long ファイルの容量

deleteDataObject

yield return gs2.Datastore.DeleteDataObject(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
            Debug.Log(r.Result.Item.Name); // string データの名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
            Debug.Log(r.Result.Item.Status); // string 状態
            Debug.Log(r.Result.Item.Generation); // string データの世代
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);
return client.datastore.deleteDataObject(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteDataObjectResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
            // r.getResult()->getItem().getName(); // string データの名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getScope(); // string ファイルのアクセス権
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
            // r.getResult()->getItem().getStatus(); // string 状態
            // r.getResult()->getItem().getGeneration(); // string データの世代
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
);

アップロードしたデータを削除

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
dataObjectName string true データの名前
パラメータ データ型 説明
item EzDataObject データオブジェクト

データオブジェクト履歴

データオブジェクト履歴

EzDataObjectHistory

パラメータ データ型 必須 説明
dataObjectHistoryId string true データオブジェクト履歴
generation string true 世代ID
contentLength long true データサイズ
createdAt long true 作成日時

listDataObhectHistories

yield return gs2.Datastore.ListDataObhectHistories(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[DataObjectHistory] データオブジェクト履歴のリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.datastore.listDataObhectHistories(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListDataObhectHistoriesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[DataObjectHistory] データオブジェクト履歴のリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    dataObjectName,   //  データの名前
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

データオブジェクト履歴の一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
dataObjectName string true データの名前
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[DataObjectHistory] データオブジェクト履歴のリスト
nextPageToken string リストの続きを取得するためのページトークン

v

GS2-Dictionary

アイテム図鑑やキャラクター図鑑のようなプレイヤー・エントリー毎に「手に入れた」「手に入れない」の二値を持つデータベースを実現します。

エントリーモデル

エントリーモデル

EzEntryModel

パラメータ データ型 必須 説明
name string true エントリーの種類名
metadata string false エントリーの種類のメタデータ

listEntryModels

yield return gs2.Dictionary.ListEntryModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[EntryModel] エントリーモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.dictionary.listEntryModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListEntryModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[EntryModel] エントリーモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

エントリーモデル情報の一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[EntryModel] エントリーモデルのリスト

getEntryModel

yield return gs2.Dictionary.GetEntryModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string エントリーの種類名
            Debug.Log(r.Result.Item.Metadata); // string エントリーの種類のメタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    entryName,   //  エントリーモデル名
);
return client.dictionary.getEntryModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetEntryModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string エントリーの種類名
            // r.getResult()->getItem().getMetadata(); // string エントリーの種類のメタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    entryName,   //  エントリーモデル名
);

エントリーモデル情報を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
entryName string true エントリーモデル名
パラメータ データ型 説明
item EzEntryModel エントリーモデル

エントリー

エントリー

EzEntry

パラメータ データ型 必須 説明
entryId string true エントリー のGRN
userId string true ユーザーID
name string true エントリーの種類名
acquiredAt long false

listEntries

yield return gs2.Dictionary.ListEntries(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Entry] エントリーのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limit,   //  データの取得件数(オプション値)
    pageToken   //  データの取得を開始する位置を指定するトークン(オプション値)
);
return client.dictionary.listEntries(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListEntriesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Entry] エントリーのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limit,   //  データの取得件数(オプション値)
    pageToken   //  データの取得を開始する位置を指定するトークン(オプション値)
);

エントリーの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
limit long false データの取得件数
pageToken string false データの取得を開始する位置を指定するトークン
パラメータ データ型 説明
items list[Entry] エントリーのリスト
nextPageToken string リストの続きを取得するためのページトークン

getEntry

yield return gs2.Dictionary.GetEntry(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.EntryId); // string エントリー のGRN
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Name); // string エントリーの種類名
            Debug.Log(r.Result.Item.AcquiredAt); // long None
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    entryModelName,   //  エントリー名
);
return client.dictionary.getEntry(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetEntryResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getEntryId(); // string エントリー のGRN
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getName(); // string エントリーの種類名
            // r.getResult()->getItem().getAcquiredAt(); // long None
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    entryModelName,   //  エントリー名
);

エントリーを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
entryModelName string true エントリー名
パラメータ データ型 説明
item EzEntry エントリー

getEntryWithSignature

yield return gs2.Dictionary.GetEntryWithSignature(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.EntryId); // string エントリー のGRN
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Name); // string エントリーの種類名
            Debug.Log(r.Result.Item.AcquiredAt); // long None
            Debug.Log(r.Result.Body); // string 署名対象のエントリー情報
            Debug.Log(r.Result.Signature); // string 署名
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    entryModelName,   //  エントリー名
    keyId,   //  署名の発行に使用する暗号鍵 のGRN
);
return client.dictionary.getEntryWithSignature(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetEntryWithSignatureResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getEntryId(); // string エントリー のGRN
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getName(); // string エントリーの種類名
            // r.getResult()->getItem().getAcquiredAt(); // long None
            // r.getResult()->getBody(); // string 署名対象のエントリー情報
            // r.getResult()->getSignature(); // string 署名
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    entryModelName,   //  エントリー名
    keyId,   //  署名の発行に使用する暗号鍵 のGRN
);

エントリーを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
entryModelName string true エントリー名
keyId string true 署名の発行に使用する暗号鍵 のGRN
パラメータ データ型 説明
item EzEntry エントリー
body string 署名対象のエントリー情報
signature string 署名

設定値

設定値

EzConfig

パラメータ データ型 必須 説明
key string false 名前
value string false

v

GS2-Exchange

アイテムの売却価格や、レアリティが異なる進化素材間の交換レートなど、常設される交換処理を実現します。

交換レートモデル

交換レートモデル

EzRateModel

パラメータ データ型 必須 説明
name string true 交換レートの種類名
metadata string false 交換レートの種類のメタデータ
consumeActions list[ConsumeAction] true 消費アクションリスト
acquireActions list[AcquireAction] true 入手アクションリスト

listRateModels

yield return gs2.Exchange.ListRateModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[RateModel] 交換レートモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.exchange.listRateModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListRateModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[RateModel] 交換レートモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

交換レートモデル情報の一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[RateModel] 交換レートモデルのリスト

getRateModel

yield return gs2.Exchange.GetRateModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string 交換レートの種類名
            Debug.Log(r.Result.Item.Metadata); // string 交換レートの種類のメタデータ
            Debug.Log(r.Result.Item.ConsumeActions); // list[ConsumeAction] 消費アクションリスト
            Debug.Log(r.Result.Item.AcquireActions); // list[AcquireAction] 入手アクションリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);
return client.exchange.getRateModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRateModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string 交換レートの種類名
            // r.getResult()->getItem().getMetadata(); // string 交換レートの種類のメタデータ
            // r.getResult()->getItem().getConsumeActions(); // list[ConsumeAction] 消費アクションリスト
            // r.getResult()->getItem().getAcquireActions(); // list[AcquireAction] 入手アクションリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);

交換レートモデル情報を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
rateName string true 交換レート名
パラメータ データ型 説明
item EzRateModel 交換レートモデル

交換

交換

exchange

yield return gs2.Exchange.Exchange(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string 交換レートの種類名
            Debug.Log(r.Result.Item.Metadata); // string 交換レートの種類のメタデータ
            Debug.Log(r.Result.Item.ConsumeActions); // list[ConsumeAction] 消費アクションリスト
            Debug.Log(r.Result.Item.AcquireActions); // list[AcquireAction] 入手アクションリスト
            Debug.Log(r.Result.StampSheet); // string 交換処理の実行に使用するスタンプシート
            Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レートの種類名
    count,   //  交換するロット数
    config   //  設定値(オプション値)
);
return client.exchange.exchange(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncExchangeResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string 交換レートの種類名
            // r.getResult()->getItem().getMetadata(); // string 交換レートの種類のメタデータ
            // r.getResult()->getItem().getConsumeActions(); // list[ConsumeAction] 消費アクションリスト
            // r.getResult()->getItem().getAcquireActions(); // list[AcquireAction] 入手アクションリスト
            // r.getResult()->getStampSheet(); // string 交換処理の実行に使用するスタンプシート
            // r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レートの種類名
    count,   //  交換するロット数
    config   //  設定値(オプション値)
);

交換を実行

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
rateName string true 交換レートの種類名
count integer true 交換するロット数
config list[Config] false 設定値
パラメータ データ型 説明
item EzRateModel 交換レートモデル
stampSheet string 交換処理の実行に使用するスタンプシート
stampSheetEncryptionKeyId string スタンプシートの署名計算に使用した暗号鍵GRN

交換待機

交換待機

EzAwait

パラメータ データ型 必須 説明
userId string true ユーザーID
rateName string true 交換レート名
name string true 交換待機の名前
exchangedAt long true 作成日時

listAwaits

yield return gs2.Exchange.ListAwaits(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Await] 交換待機のリスト
            Debug.Log(r.Result.NextPageToken); // string 次のページを取得するためのトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken   //  データの取得を開始する位置を指定するトークン(オプション値)
);
return client.exchange.listAwaits(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListAwaitsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Await] 交換待機のリスト
            // r.getResult()->getNextPageToken(); // string 次のページを取得するためのトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken   //  データの取得を開始する位置を指定するトークン(オプション値)
);

交換待機情報の一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
パラメータ データ型 説明
items list[Await] 交換待機のリスト
nextPageToken string 次のページを取得するためのトークン

getAwait

yield return gs2.Exchange.GetAwait(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RateName); // string 交換レート名
            Debug.Log(r.Result.Item.Name); // string 交換待機の名前
            Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);
return client.exchange.getAwait(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetAwaitResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRateName(); // string 交換レート名
            // r.getResult()->getItem().getName(); // string 交換待機の名前
            // r.getResult()->getItem().getExchangedAt(); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);

交換待機情報を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
rateName string true 交換レート名
パラメータ データ型 説明
item EzAwait 交換待機

acquire

yield return gs2.Exchange.Acquire(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RateName); // string 交換レート名
            Debug.Log(r.Result.Item.Name); // string 交換待機の名前
            Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
            Debug.Log(r.Result.StampSheet); // string 報酬取得処理の実行に使用するスタンプシート
            Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);
return client.exchange.acquire(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAcquireResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRateName(); // string 交換レート名
            // r.getResult()->getItem().getName(); // string 交換待機の名前
            // r.getResult()->getItem().getExchangedAt(); // long 作成日時
            // r.getResult()->getStampSheet(); // string 報酬取得処理の実行に使用するスタンプシート
            // r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);

交換待機の報酬を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
rateName string true 交換レート名
パラメータ データ型 説明
item EzAwait 交換待機
stampSheet string 報酬取得処理の実行に使用するスタンプシート
stampSheetEncryptionKeyId string スタンプシートの署名計算に使用した暗号鍵GRN

skip

yield return gs2.Exchange.Skip(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RateName); // string 交換レート名
            Debug.Log(r.Result.Item.Name); // string 交換待機の名前
            Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
            Debug.Log(r.Result.StampSheet); // string 報酬取得処理の実行に使用するスタンプシート
            Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);
return client.exchange.skip(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSkipResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRateName(); // string 交換レート名
            // r.getResult()->getItem().getName(); // string 交換待機の名前
            // r.getResult()->getItem().getExchangedAt(); // long 作成日時
            // r.getResult()->getStampSheet(); // string 報酬取得処理の実行に使用するスタンプシート
            // r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);

交換待機を対価を払ってスキップ

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
rateName string true 交換レート名
パラメータ データ型 説明
item EzAwait 交換待機
stampSheet string 報酬取得処理の実行に使用するスタンプシート
stampSheetEncryptionKeyId string スタンプシートの署名計算に使用した暗号鍵GRN

deleteAwait

yield return gs2.Exchange.DeleteAwait(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RateName); // string 交換レート名
            Debug.Log(r.Result.Item.Name); // string 交換待機の名前
            Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);
return client.exchange.deleteAwait(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteAwaitResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRateName(); // string 交換レート名
            // r.getResult()->getItem().getName(); // string 交換待機の名前
            // r.getResult()->getItem().getExchangedAt(); // long 作成日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    rateName,   //  交換レート名
);

交換待機情報を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
rateName string true 交換レート名
パラメータ データ型 説明
item EzAwait 交換待機

設定値

設定値

EzConfig

パラメータ データ型 必須 説明
key string false 名前
value string false

入手アクション

入手アクション

EzAcquireAction

パラメータ データ型 必須 説明
action string true スタンプシートで実行するアクションの種類
request string true 入手リクエストのJSON

消費アクション

消費アクション

EzConsumeAction

パラメータ データ型 必須 説明
action string true スタンプタスクで実行するアクションの種類
request string true 消費リクエストのJSON

v

GS2-Experience

キャラクターやスキルのレベル、親愛度など、経験値を積み重ねてランクアップしていく仕組みの実現に使用します。 ランクキャップ機能も有しており、キャラクターやスキルなど個別の要素ごとに上限管理を行うことができます。

経験値を取り扱うためには2つのマスターデータを用意する必要があります。

経験値モデル はランク体系の種類を表現するもので、たとえばキャラクターレベルとスキルレベルなどです。 経験値モデル の設定項目には、ランクの算出に使用する ランクアップ経験値テーブル のほか、ランクキャップのデフォルト値や上限などを入力します。

ランクアップ経験値テーブル にはランクアップする経験値の閾値を設定します。 経験値 0 のときを ランク 1 として、閾値が 100, 200, 300 であれば、経験値 150 のときはランク 2 になります。

ステータス は、 経験値モデルプロパティID の組み合わせごとに 経験値やランクキャップの現在値 を管理します。 プロパティID は経験値の蓄積対象を区別するためのIDで、任意の文字列を登録できます。 たとえば、キャラクターごとに剣スキルと魔法スキルのレベルがあるゲームであれば、 経験値モデル にスキルレベル用のモデルを指定し、 プロパティID にはキャラクターIDに sword あるいは magic を連結したものを指定するという実装が考えられます。

経験値・ランクアップ閾値モデル

経験値・ランクアップ閾値モデル

ランクキャップの初期値・最大値や、ランクアップのしきい値が異なる要素ごとに種類を定義します。

EzExperienceModel

パラメータ データ型 必須 説明
name string true 経験値の種類名
metadata string false 経験値の種類のメタデータ
defaultExperience long true 経験値の初期値
defaultRankCap long true ランクキャップの初期値
maxRankCap long true ランクキャップの最大値
rankThreshold Threshold false ランクアップ閾値

listExperienceModels

yield return gs2.Experience.ListExperienceModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[ExperienceModel] 経験値・ランクアップ閾値モデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.experience.listExperienceModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListExperienceModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[ExperienceModel] 経験値・ランクアップ閾値モデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

経験値・ランクアップ閾値モデル情報の一覧を取得

ランクキャップの情報やランクアップ閾値の情報を取得します。 次のランクアップまでに必要な獲得経験値量などをゲーム内で表示したい場合はこのモデルデータを使ってください。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[ExperienceModel] 経験値・ランクアップ閾値モデルのリスト

getExperienceModel

yield return gs2.Experience.GetExperienceModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string 経験値の種類名
            Debug.Log(r.Result.Item.Metadata); // string 経験値の種類のメタデータ
            Debug.Log(r.Result.Item.DefaultExperience); // long 経験値の初期値
            Debug.Log(r.Result.Item.DefaultRankCap); // long ランクキャップの初期値
            Debug.Log(r.Result.Item.MaxRankCap); // long ランクキャップの最大値
            Debug.Log(r.Result.Item.RankThreshold.Metadata); // string ランクアップ閾値のメタデータ
            Debug.Log(r.Result.Item.RankThreshold.Values); // list[long] ランクアップ経験値閾値リスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    experienceName,   //  経験値の種類名
);
return client.experience.getExperienceModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetExperienceModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string 経験値の種類名
            // r.getResult()->getItem().getMetadata(); // string 経験値の種類のメタデータ
            // r.getResult()->getItem().getDefaultExperience(); // long 経験値の初期値
            // r.getResult()->getItem().getDefaultRankCap(); // long ランクキャップの初期値
            // r.getResult()->getItem().getMaxRankCap(); // long ランクキャップの最大値
            // r.getResult()->getItem().getRankThreshold().getMetadata(); // string ランクアップ閾値のメタデータ
            // r.getResult()->getItem().getRankThreshold().getValues(); // list[long] ランクアップ経験値閾値リスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    experienceName,   //  経験値の種類名
);

経験値・ランクアップ閾値モデル情報を取得

経験値の種類名 を指定してランクキャップの情報やランクアップ閾値の情報を取得します。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
experienceName string true 経験値の種類名
パラメータ データ型 説明
item EzExperienceModel 経験値・ランクアップ閾値モデル

ランクアップ閾値

ランクアップ閾値

ランクアップに必要な経験値テーブルを定義

EzThreshold

パラメータ データ型 必須 説明
metadata string false ランクアップ閾値のメタデータ
values list[long] true ランクアップ経験値閾値リスト

ステータス

ステータス

獲得経験値・現在のランク・ランクキャップ情報を格納します。

EzStatus

パラメータ データ型 必須 説明
experienceName string true 経験値の種類の名前
propertyId string true プロパティID
experienceValue long true 累計獲得経験値
rankValue long true 現在のランク
rankCapValue long true 現在のランクキャップ

listStatuses

yield return gs2.Experience.ListStatuses(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Status] ステータスのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    experienceName,   //  経験値の種類名(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.experience.listStatuses(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListStatusesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Status] ステータスのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    experienceName,   //  経験値の種類名(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

ステータス情報の一覧を取得

経験値の種類名 は省略可能で、指定しなかった場合はゲームプレイヤーに属する全てのステータス情報が取得できます。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
experienceName string false 経験値の種類名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Status] ステータスのリスト
nextPageToken string リストの続きを取得するためのページトークン

getStatus

yield return gs2.Experience.GetStatus(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.ExperienceName); // string 経験値の種類の名前
            Debug.Log(r.Result.Item.PropertyId); // string プロパティID
            Debug.Log(r.Result.Item.ExperienceValue); // long 累計獲得経験値
            Debug.Log(r.Result.Item.RankValue); // long 現在のランク
            Debug.Log(r.Result.Item.RankCapValue); // long 現在のランクキャップ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    experienceName,   //  経験値の種類の名前
    propertyId,   //  プロパティID
);
return client.experience.getStatus(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetStatusResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getExperienceName(); // string 経験値の種類の名前
            // r.getResult()->getItem().getPropertyId(); // string プロパティID
            // r.getResult()->getItem().getExperienceValue(); // long 累計獲得経験値
            // r.getResult()->getItem().getRankValue(); // long 現在のランク
            // r.getResult()->getItem().getRankCapValue(); // long 現在のランクキャップ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    experienceName,   //  経験値の種類の名前
    propertyId,   //  プロパティID
);

経験値の種類プロパティID を指定してステータス情報を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
experienceName string true 経験値の種類の名前
propertyId string true プロパティID
パラメータ データ型 説明
item EzStatus ステータス

GS2-Formation

装備やパーティ編成機能を実現します。

編成情報を記録する フォーム(Form) と、編成した フォーム を保存する 保存したフォーム(Mold) があります。 パーティ編成を例にすると、キャラクターを フォーム に設定し、パーティを編成します。 編成したパーティ情報を複数記録する場合は 保存したフォーム を使って実現できます。

保存したフォーム に保存できる数にはキャパシティを設定でき、キャパシティの値は引き上げることができます。

フォーム に編成するプロパティはプロパティIDで指定することになりますが、プロパティの正規表現で値を限定することができます。 また、GS2-Inventory のリソースを設定する場合は、GS2-Inventory が発行する 署名付きアイテムセット を使って編成対象に指定できます。 署名付きアイテムセット とは、該当のアイテムを所有していることを保証する署名付きプロパティ情報で、こちらを使う場合はクライアントから直接編成することを許します。

この 所有していることを保証する とは編成時点での保証であり、編成後にプロパティを手放した場合のフォローはありません。 GS2-Inventory でプロパティを消費したり売却したりする場合は、事前に GS2-Formation で編成に使用されていないかの判定はクライアントまたはスクリプトで実装する必要があります。

フォームモデル

フォームモデル

フォームとは複数のプロパティを編成したものです。 キャラクターを編成してパーティに。武器や防具を編成して装備とした場合、『パーティ』や『装備』がフォームに相当します。

1つのフォームは複数のスロットを持ちます。たとえば、キャラクターを編成するためのパーティ用のフォームを用意するとして、 最大5人のキャラクターを編成できる場合、5つのスロットを用意し、各スロットにキャラクターのIDを設定できるようにしておきます。

EzFormModel

パラメータ データ型 必須 説明
name string true フォームの種類名
metadata string false フォームの種類のメタデータ
slots list[SlotModel] true スリットリスト

フォームの保存領域

フォームの保存領域

フォームで編成した結果を保存する領域を定義します。 たとえば、キャラクターを編成してパーティを編成できる仕様がある場合、キャラクターの属性毎の編成内容をこの領域に保存しておくことで クエストに出現する敵キャラクターの属性に合わせて毎回編成しなくても、保存結果をロードするだけでよくなります。

同一フォーム(パーティの編成)内容を複数保存したい場合も、保存領域マスターは1つ定義すれば対応できます。 また、いくつ保存できるか。というパラメータはプレイヤーごとにキャップの引き上げが出来るようになっています。

EzMoldModel

パラメータ データ型 必須 説明
name string true フォームの保存領域名
metadata string false メタデータ
formModel FormModel false
initialMaxCapacity integer true フォームを保存できる初期キャパシティ
maxCapacity integer true フォームを保存できるキャパシティ

listMoldModels

yield return gs2.Formation.ListMoldModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[MoldModel] フォームの保存領域のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.formation.listMoldModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMoldModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[MoldModel] フォームの保存領域のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

フォームモデル情報の一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[MoldModel] フォームの保存領域のリスト

getMoldModel

yield return gs2.Formation.GetMoldModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string フォームの保存領域名
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.Item.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.Item.FormModel.Slots); // list[SlotModel] スリットリスト
            Debug.Log(r.Result.Item.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
            Debug.Log(r.Result.Item.MaxCapacity); // integer フォームを保存できるキャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域名
);
return client.formation.getMoldModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetMoldModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string フォームの保存領域名
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getItem().getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getItem().getFormModel().getSlots(); // list[SlotModel] スリットリスト
            // r.getResult()->getItem().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
            // r.getResult()->getItem().getMaxCapacity(); // integer フォームを保存できるキャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域名
);

フォームモデル情報を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
moldName string true フォームの保存領域名
パラメータ データ型 説明
item EzMoldModel フォームの保存領域

保存したフォーム

保存したフォーム

ゲームプレイヤーは複数のフォームパターンを保存できます。 このエンティティは保存したフォームに対して1つのエントリが作成されます。

EzMold

パラメータ データ型 必須 説明
name string true フォームの保存領域の名前
userId string false ユーザーID
capacity integer true 現在のキャパシティ

listMolds

yield return gs2.Formation.ListMolds(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Mold] 保存したフォームのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.formation.listMolds(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMoldsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Mold] 保存したフォームのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

保存したフォーム情報の一覧を取得

フォームの保存領域名 は省略可能で、指定しなかった場合はゲームプレイヤーに属する全ての保存したフォーム情報が取得できます。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Mold] 保存したフォームのリスト
nextPageToken string リストの続きを取得するためのページトークン

getMold

yield return gs2.Formation.GetMold(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.Capacity); // integer 現在のキャパシティ
            Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
            Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
            Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
            Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
);
return client.formation.getMold(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetMoldResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string フォームの保存領域の名前
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getCapacity(); // integer 現在のキャパシティ
            // r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
            // r.getResult()->getMoldModel().getMetadata(); // string メタデータ
            // r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
            // r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
            // r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
);

フォームの保存領域プロパティID を指定して保存したフォーム情報を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
moldName string true フォームの保存領域の名前
パラメータ データ型 説明
item EzMold 保存したフォーム
moldModel EzMoldModel フォームの保存領域

フォーム

フォーム

フォームとは複数のプロパティを編成したものです。 キャラクターを編成してパーティに。武器や防具を編成して装備とした場合、『パーティ』や『装備』がフォームに相当します。

EzForm

パラメータ データ型 必須 説明
name string true フォームの保存領域の名前
index integer true 保存領域のインデックス
slots list[Slot] true スロットリスト

listForms

yield return gs2.Formation.ListForms(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Form] フォームのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.formation.listForms(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListFormsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Form] フォームのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

フォームの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
moldName string false フォームの保存領域の名前
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Form] フォームのリスト
nextPageToken string リストの続きを取得するためのページトークン

getForm

yield return gs2.Formation.GetForm(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
            Debug.Log(r.Result.Item.Index); // integer 保存領域のインデックス
            Debug.Log(r.Result.Item.Slots); // list[Slot] スロットリスト
            Debug.Log(r.Result.Mold.Name); // string フォームの保存領域の名前
            Debug.Log(r.Result.Mold.UserId); // string ユーザーID
            Debug.Log(r.Result.Mold.Capacity); // integer 現在のキャパシティ
            Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
            Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
            Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
            Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
            Debug.Log(r.Result.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.FormModel.Slots); // list[SlotModel] スリットリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
    index,   //  保存領域のインデックス
);
return client.formation.getForm(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetFormResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string フォームの保存領域の名前
            // r.getResult()->getItem().getIndex(); // integer 保存領域のインデックス
            // r.getResult()->getItem().getSlots(); // list[Slot] スロットリスト
            // r.getResult()->getMold().getName(); // string フォームの保存領域の名前
            // r.getResult()->getMold().getUserId(); // string ユーザーID
            // r.getResult()->getMold().getCapacity(); // integer 現在のキャパシティ
            // r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
            // r.getResult()->getMoldModel().getMetadata(); // string メタデータ
            // r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
            // r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
            // r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
            // r.getResult()->getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getFormModel().getSlots(); // list[SlotModel] スリットリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
    index,   //  保存領域のインデックス
);

フォームを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
moldName string true フォームの保存領域の名前
index integer true 保存領域のインデックス
パラメータ データ型 説明
item EzForm フォーム
mold EzMold 保存したフォーム
moldModel EzMoldModel フォームの保存領域
formModel EzFormModel フォームモデル

getFormWithSignature

yield return gs2.Formation.GetFormWithSignature(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
            Debug.Log(r.Result.Item.Index); // integer 保存領域のインデックス
            Debug.Log(r.Result.Item.Slots); // list[Slot] スロットリスト
            Debug.Log(r.Result.Body); // string 署名対象の値
            Debug.Log(r.Result.Signature); // string 署名
            Debug.Log(r.Result.Mold.Name); // string フォームの保存領域の名前
            Debug.Log(r.Result.Mold.UserId); // string ユーザーID
            Debug.Log(r.Result.Mold.Capacity); // integer 現在のキャパシティ
            Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
            Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
            Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
            Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
            Debug.Log(r.Result.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.FormModel.Slots); // list[SlotModel] スリットリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
    index,   //  保存領域のインデックス
    keyId,   //  署名の発行に使用する暗号鍵 のGRN
);
return client.formation.getFormWithSignature(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetFormWithSignatureResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string フォームの保存領域の名前
            // r.getResult()->getItem().getIndex(); // integer 保存領域のインデックス
            // r.getResult()->getItem().getSlots(); // list[Slot] スロットリスト
            // r.getResult()->getBody(); // string 署名対象の値
            // r.getResult()->getSignature(); // string 署名
            // r.getResult()->getMold().getName(); // string フォームの保存領域の名前
            // r.getResult()->getMold().getUserId(); // string ユーザーID
            // r.getResult()->getMold().getCapacity(); // integer 現在のキャパシティ
            // r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
            // r.getResult()->getMoldModel().getMetadata(); // string メタデータ
            // r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
            // r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
            // r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
            // r.getResult()->getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getFormModel().getSlots(); // list[SlotModel] スリットリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
    index,   //  保存領域のインデックス
    keyId,   //  署名の発行に使用する暗号鍵 のGRN
);

フォームを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
moldName string true フォームの保存領域の名前
index integer true 保存領域のインデックス
keyId string true 署名の発行に使用する暗号鍵 のGRN
パラメータ データ型 説明
item EzForm フォーム
body string 署名対象の値
signature string 署名
mold EzMold 保存したフォーム
moldModel EzMoldModel フォームの保存領域
formModel EzFormModel フォームモデル

setForm

yield return gs2.Formation.SetForm(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
            Debug.Log(r.Result.Item.Index); // integer 保存領域のインデックス
            Debug.Log(r.Result.Item.Slots); // list[Slot] スロットリスト
            Debug.Log(r.Result.Mold.Name); // string フォームの保存領域の名前
            Debug.Log(r.Result.Mold.UserId); // string ユーザーID
            Debug.Log(r.Result.Mold.Capacity); // integer 現在のキャパシティ
            Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
            Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
            Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
            Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
            Debug.Log(r.Result.FormModel.Name); // string フォームの種類名
            Debug.Log(r.Result.FormModel.Metadata); // string フォームの種類のメタデータ
            Debug.Log(r.Result.FormModel.Slots); // list[SlotModel] スリットリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
    index,   //  保存領域のインデックス
    slots,   //  編成するスロットのリスト
    keyId,   //  署名の発行に使用した GS2-Key の暗号鍵GRN
);
return client.formation.setForm(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSetFormResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string フォームの保存領域の名前
            // r.getResult()->getItem().getIndex(); // integer 保存領域のインデックス
            // r.getResult()->getItem().getSlots(); // list[Slot] スロットリスト
            // r.getResult()->getMold().getName(); // string フォームの保存領域の名前
            // r.getResult()->getMold().getUserId(); // string ユーザーID
            // r.getResult()->getMold().getCapacity(); // integer 現在のキャパシティ
            // r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
            // r.getResult()->getMoldModel().getMetadata(); // string メタデータ
            // r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
            // r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
            // r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
            // r.getResult()->getFormModel().getName(); // string フォームの種類名
            // r.getResult()->getFormModel().getMetadata(); // string フォームの種類のメタデータ
            // r.getResult()->getFormModel().getSlots(); // list[SlotModel] スリットリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    moldName,   //  フォームの保存領域の名前
    index,   //  保存領域のインデックス
    slots,   //  編成するスロットのリスト
    keyId,   //  署名の発行に使用した GS2-Key の暗号鍵GRN
);

フォームを更新

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
moldName string true フォームの保存領域の名前
index integer true 保存領域のインデックス
slots list[SlotWithSignature] true 編成するスロットのリスト
keyId string true 署名の発行に使用した GS2-Key の暗号鍵GRN
パラメータ データ型 説明
item EzForm フォーム
mold EzMold 保存したフォーム
moldModel EzMoldModel フォームの保存領域
formModel EzFormModel フォームモデル

スロット

スロット

フォームに設定するプロパティ

EzSlot

パラメータ データ型 必須 説明
name string true スロットモデル名
propertyId string true プロパティID
metadata string false メタデータ

スロットモデル

スロットモデル

EzSlotModel

パラメータ データ型 必須 説明
name string true スロットモデル名
propertyRegex string false プロパティとして設定可能な値の正規表現
metadata string false メタデータ

署名付きスロット

署名付きスロット

フォームに設定する存在証明されたプロパティ

EzSlotWithSignature

パラメータ データ型 必須 説明
name string true スロットモデル名
propertyType string true プロパティの種類
body string true ペイロード
signature string true プロパティIDのリソースを所有していることを証明する署名
metadata string false メタデータ

入手アクションコンフィグ

入手アクションコンフィグ

EzAcquireActionConfig

パラメータ データ型 必須 説明
name string false スロット名
config list[Config] false スタンプシートに使用するコンフィグ

設定値

設定値

EzConfig

パラメータ データ型 必須 説明
key string false 名前
value string false

入手アクション

入手アクション

EzAcquireAction

パラメータ データ型 必須 説明
action string true スタンプシートで実行するアクションの種類
request string true 入手リクエストのJSON

GS2-Friend

ゲーム内の友達関係を実現するときに使用します。

リクエストを出して、承認されて初めて関係の構築されるフレンドと、 相手の承認手続きなしに構築できるフォローがあります。

ゲームプレイヤーのメタデータとしてプロフィール情報を持たせることができます。 プロフィール情報は 公開 フォロワーに公開 フレンドに公開 のスコープがあり、スコープに応じて他プレイヤーに公開されます。

フレンド・フォロワー数の上限はそれぞれ1万人ですが、連携するサービスによっては各サービスのポリシーに従って追加の制限が加わる可能性があります。

プロフィール

プロフィール

プロフィールは 公開 フォロワー向けに公開 フレンド向けに公開 のスコープがあります。

EzProfile

パラメータ データ型 必須 説明
userId string true ユーザーID
publicProfile string false 公開されるプロフィール
followerProfile string false フォロワー向けに公開されるプロフィール
friendProfile string false フレンド向けに公開されるプロフィール

getProfile

yield return gs2.Friend.GetProfile(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
            Debug.Log(r.Result.Item.FollowerProfile); // string フォロワー向けに公開されるプロフィール
            Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.friend.getProfile(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetProfileResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
            // r.getResult()->getItem().getFollowerProfile(); // string フォロワー向けに公開されるプロフィール
            // r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

自分のプロフィールを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
パラメータ データ型 説明
item EzProfile プロフィール

updateProfile

yield return gs2.Friend.UpdateProfile(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
            Debug.Log(r.Result.Item.FollowerProfile); // string フォロワー向けに公開されるプロフィール
            Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    publicProfile,   //  公開されるプロフィール(オプション値)
    followerProfile,   //  フォロワー向けに公開されるプロフィール(オプション値)
    friendProfile   //  フレンド向けに公開されるプロフィール(オプション値)
);
return client.friend.updateProfile(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateProfileResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
            // r.getResult()->getItem().getFollowerProfile(); // string フォロワー向けに公開されるプロフィール
            // r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    publicProfile,   //  公開されるプロフィール(オプション値)
    followerProfile,   //  フォロワー向けに公開されるプロフィール(オプション値)
    friendProfile   //  フレンド向けに公開されるプロフィール(オプション値)
);

自分のプロフィールを更新

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
publicProfile string false 公開されるプロフィール
followerProfile string false フォロワー向けに公開されるプロフィール
friendProfile string false フレンド向けに公開されるプロフィール
パラメータ データ型 説明
item EzProfile 更新したプロフィール

getPublicProfile

yield return gs2.Friend.GetPublicProfile(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    userId,   //  ユーザーID
);
return client.friend.getPublicProfile(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetPublicProfileResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    userId,   //  ユーザーID
);

他人の公開プロフィールを取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
userId string true ユーザーID
パラメータ データ型 説明
item EzPublicProfile 公開プロフィール

フォロー

フォロー

各ゲームプレイヤーが誰をフォローしているかを管理します。

describeFollowUsers

yield return gs2.Friend.DescribeFollowUsers(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[FollowUser] フォローしているユーザーのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    withProfile,   //  プロフィールも一緒に取得するか
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.friend.describeFollowUsers(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeFollowUsersResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[FollowUser] フォローしているユーザーのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    withProfile,   //  プロフィールも一緒に取得するか
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

他プレイヤーをフォローする

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
withProfile boolean true プロフィールも一緒に取得するか
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[FollowUser] フォローしているユーザーのリスト
nextPageToken string リストの続きを取得するためのページトークン

follow

yield return gs2.Friend.Follow(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  フォローされるユーザID
);
return client.friend.follow(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncFollowResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  フォローされるユーザID
);

他プレイヤーをフォローする

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true フォローされるユーザID
パラメータ データ型 説明
item EzFollowUser フォローしたユーザ

unfollow

yield return gs2.Friend.Unfollow(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  フォローされているユーザID
);
return client.friend.unfollow(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnfollowResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  フォローされているユーザID
);

フォローしている相手をアンフォローする

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true フォローされているユーザID
パラメータ データ型 説明
item EzFollowUser アンフォローしたユーザ

フレンド

フレンド

describeFriends

yield return gs2.Friend.DescribeFriends(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[FriendUser] フレンドのユーザーのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    withProfile,   //  プロフィールも一緒に取得するか
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.friend.describeFriends(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeFriendsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[FriendUser] フレンドのユーザーのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    withProfile,   //  プロフィールも一緒に取得するか
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

フレンドの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
withProfile boolean true プロフィールも一緒に取得するか
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[FriendUser] フレンドのユーザーのリスト
nextPageToken string リストの続きを取得するためのページトークン

getFriend

yield return gs2.Friend.GetFriend(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
            Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  ユーザーID
    withProfile,   //  プロフィールも一緒に取得するか
);
return client.friend.getFriend(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetFriendResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
            // r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  ユーザーID
    withProfile,   //  プロフィールも一緒に取得するか
);

フレンドを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true ユーザーID
withProfile boolean true プロフィールも一緒に取得するか
パラメータ データ型 説明
item EzFriendUser フレンドのユーザー

deleteFriend

yield return gs2.Friend.DeleteFriend(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
            Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  ユーザーID
);
return client.friend.deleteFriend(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteFriendResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
            // r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  ユーザーID
);

フレンドを削除

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true ユーザーID
パラメータ データ型 説明
item EzFriendUser フレンドのユーザー

フレンドリクエストの受信ボックス

フレンドリクエストの受信ボックス

describeSendRequests

yield return gs2.Friend.DescribeSendRequests(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[FriendRequest] フレンドリクエストのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.friend.describeSendRequests(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeSendRequestsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[FriendRequest] フレンドリクエストのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

送信したフレンドリクエストの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[FriendRequest] フレンドリクエストのリスト

sendRequest

yield return gs2.Friend.SendRequest(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  リクエストの送信先ユーザID
);
return client.friend.sendRequest(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSendRequestResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getTargetUserId(); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  リクエストの送信先ユーザID
);

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true リクエストの送信先ユーザID
パラメータ データ型 説明
item EzFriendRequest 送信したフレンドリクエスト

deleteRequest

yield return gs2.Friend.DeleteRequest(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  リクエストの送信先ユーザID
);
return client.friend.deleteRequest(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteRequestResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getTargetUserId(); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  リクエストの送信先ユーザID
);

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true リクエストの送信先ユーザID
パラメータ データ型 説明
item EzFriendRequest 削除したフレンドリクエスト

フレンドリクエストの受信ボックス

フレンドリクエストの受信ボックス

describeReceiveRequests

yield return gs2.Friend.DescribeReceiveRequests(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[FriendRequest] フレンドリクエストのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.friend.describeReceiveRequests(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeReceiveRequestsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[FriendRequest] フレンドリクエストのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

受信したフレンドリクエスト一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[FriendRequest] フレンドリクエストのリスト

accept

yield return gs2.Friend.Accept(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    fromUserId,   //  フレンドリクエストを送信したユーザID
);
return client.friend.accept(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAcceptResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getTargetUserId(); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    fromUserId,   //  フレンドリクエストを送信したユーザID
);

フレンドリクエストを承認

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
fromUserId string true フレンドリクエストを送信したユーザID
パラメータ データ型 説明
item EzFriendRequest 承諾したフレンドリクエスト

reject

yield return gs2.Friend.Reject(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    fromUserId,   //  フレンドリクエストを送信したユーザID
);
return client.friend.reject(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncRejectResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getTargetUserId(); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    fromUserId,   //  フレンドリクエストを送信したユーザID
);

フレンドリクエストを拒否

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
fromUserId string true フレンドリクエストを送信したユーザID
パラメータ データ型 説明
item EzFriendRequest 拒否したフレンドリクエスト

ブラックリスト

ブラックリスト

EzBlackList

パラメータ データ型 必須 説明
userId string true ユーザーID
targetUserIds list[string] false ブラックリストのユーザーIDリスト

getBlackList

yield return gs2.Friend.GetBlackList(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[string] ブラックリストに登録されたユーザIDリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.friend.getBlackList(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetBlackListResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[string] ブラックリストに登録されたユーザIDリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

ブラックリストを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[string] ブラックリストに登録されたユーザIDリスト

registerBlackList

yield return gs2.Friend.RegisterBlackList(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.TargetUserIds); // list[string] ブラックリストのユーザーIDリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  None
);
return client.friend.registerBlackList(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncRegisterBlackListResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getTargetUserIds(); // list[string] ブラックリストのユーザーIDリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  None
);

ブラックリストにユーザを登録

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true None
パラメータ データ型 説明
item EzBlackList ブラックリスト

unregisterBlackList

yield return gs2.Friend.UnregisterBlackList(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.TargetUserIds); // list[string] ブラックリストのユーザーIDリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  None
);
return client.friend.unregisterBlackList(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnregisterBlackListResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getTargetUserIds(); // list[string] ブラックリストのユーザーIDリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetUserId,   //  None
);

ブラックリストからユーザを削除

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetUserId string true None
パラメータ データ型 説明
item EzBlackList ブラックリスト

フォローしているユーザー

フォローしているユーザー

EzFollowUser

パラメータ データ型 必須 説明
userId string true ユーザーID

フレンドのユーザー

フレンドのユーザー

EzFriendUser

パラメータ データ型 必須 説明
userId string true ユーザーID
publicProfile string false 公開されるプロフィール
friendProfile string false フレンド向けに公開されるプロフィール

フレンドリクエスト

フレンドリクエスト

EzFriendRequest

パラメータ データ型 必須 説明
userId string true ユーザーID
targetUserId string true ユーザーID

公開プロフィール

公開プロフィール

EzPublicProfile

パラメータ データ型 必須 説明
userId string true ユーザーID
publicProfile string false 公開されるプロフィール

GS2-Gateway

GS2-Gateway は WebSocket を経由して GS2 にアクセスするためのプロキシ機能を提供します。 GS2-Gateway を使用して GS2 のサーバを利用することで、常時接続しながら通信できるようになります。これによって、サーバーとの通信速度が改善することが期待できます。

また、常時接続できることから、 サーバーサイドからのプッシュ通知に対応 できます。 このプッシュ通知機能があると GS2-Mission で ミッションのタスク を達成したときや、 GS2-Matchmaking で ギャザリング の参加者の増減があった時などに通知を受け取ることができるようになります。

プッシュ通知対象のデバイスがオフラインだった場合、 Firebase (https://firebase.google.com/) を使用したモバイルプッシュ通知に転送する仕組みも提供します。 この機能を使用すれば、マッチメイキングが完了したときにプレイヤーがオフラインだった場合はモバイルプッシュ通知を出してゲームに戻ってくるようプレイヤーを誘導することができます。

GS2-Gateway で常時接続用のセッションを構築する際にゲームプレイヤーの識別を行えるよう GS2-Auth で発行した アクセストークン で認証処理を行うことになりますが、 すでに同一ユーザのセッションが存在する場合は、アクセスを拒否することができます。

Websocketセッション

Websocketセッション

EzWebSocketSession

パラメータ データ型 必須 説明
connectionId string true コネクションID
namespaceName string false ネームスペース名
userId string false ユーザーID

setUserId

yield return gs2.Gateway.SetUserId(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.ConnectionId); // string コネクションID
            Debug.Log(r.Result.Item.NamespaceName); // string ネームスペース名
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    allowConcurrentAccess,   //  同時に異なるクライアントからの接続を許容するか
);
return client.gateway.setUserId(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSetUserIdResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getConnectionId(); // string コネクションID
            // r.getResult()->getItem().getNamespaceName(); // string ネームスペース名
            // r.getResult()->getItem().getUserId(); // string ユーザーID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    allowConcurrentAccess,   //  同時に異なるクライアントからの接続を許容するか
);

サーバからプッシュ通知を受けるためのユーザーIDを設定

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
allowConcurrentAccess boolean true 同時に異なるクライアントからの接続を許容するか
パラメータ データ型 説明
item EzWebSocketSession 更新したWebsocketセッション

GS2-Inbox

プレゼントつきのメッセージ機能を実現します。

送信するメッセージには送信先と内容を個別に指定することができ、また報酬を添付することができます。 受信したメッセージはメッセージボックスに格納されて既読状態が管理され、メッセージを初めて読んだときだけ報酬を受け取れるようにすることが可能です。

メッセージボックスは、作成した ネームスペース ごとに、各ゲームプレイヤーに対して1つ提供されます。 1つのメッセージボックスには複数のメッセージを格納することができます。

メッセージはクエストやミッションの報酬として送信できるほか、所持品やスタミナの管理において、上限を超過して入手できなかった分を転送するのにも利用できます。 また、まとまった数の送信先にプレゼントを届けたい場合などには、 GS2-SDK を利用してバッチ処理でメッセージを送信することができます。 メンテナンスのお詫びなどの全ゲームプレイヤーに一斉送信する通知をグローバルメッセージと呼び、マネージメントコンソールかGS2-SDKから作成することができます。

メッセージ

メッセージ

プレゼントボックスに届いたメッセージデータ。 メッセージの保存期間は最長12ヶ月の制限があります。

EzMessage

パラメータ データ型 必須 説明
messageId string true メッセージ
name string false メッセージID
metadata string true メッセージの内容に相当するメタデータ
isRead boolean true 既読状態
readAcquireActions list[AcquireAction] false 開封時に実行する入手アクション
receivedAt long true 作成日時
readAt long true 最終更新日時
expiresAt long false メッセージの有効期限

list

yield return gs2.Inbox.List(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Message] メッセージのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.inbox.list(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Message] メッセージのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

プレゼントボックス に届いているメッセージの一覧を取得

メッセージは最新のメッセージから順番に取得できます。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Message] メッセージのリスト
nextPageToken string リストの続きを取得するためのページトークン

receiveGlobalMessage

yield return gs2.Inbox.ReceiveGlobalMessage(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item); // list[Message] 受信したメッセージ一覧
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.inbox.receiveGlobalMessage(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncReceiveGlobalMessageResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem(); // list[Message] 受信したメッセージ一覧
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

グローバルメッセージを受信する

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
パラメータ データ型 説明
item list[Message] 受信したメッセージ一覧

read

yield return gs2.Inbox.Read(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.MessageId); // string メッセージ
            Debug.Log(r.Result.Item.Name); // string メッセージID
            Debug.Log(r.Result.Item.Metadata); // string メッセージの内容に相当するメタデータ
            Debug.Log(r.Result.Item.IsRead); // boolean 既読状態
            Debug.Log(r.Result.Item.ReadAcquireActions); // list[AcquireAction] 開封時に実行する入手アクション
            Debug.Log(r.Result.Item.ReceivedAt); // long 作成日時
            Debug.Log(r.Result.Item.ReadAt); // long 最終更新日時
            Debug.Log(r.Result.Item.ExpiresAt); // long メッセージの有効期限
            Debug.Log(r.Result.StampSheet); // string スタンプシート
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    messageName   //  メッセージID(オプション値)
);
return client.inbox.read(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncReadResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getMessageId(); // string メッセージ
            // r.getResult()->getItem().getName(); // string メッセージID
            // r.getResult()->getItem().getMetadata(); // string メッセージの内容に相当するメタデータ
            // r.getResult()->getItem().getIsRead(); // boolean 既読状態
            // r.getResult()->getItem().getReadAcquireActions(); // list[AcquireAction] 開封時に実行する入手アクション
            // r.getResult()->getItem().getReceivedAt(); // long 作成日時
            // r.getResult()->getItem().getReadAt(); // long 最終更新日時
            // r.getResult()->getItem().getExpiresAt(); // long メッセージの有効期限
            // r.getResult()->getStampSheet(); // string スタンプシート
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    messageName   //  メッセージID(オプション値)
);

メッセージを既読にする

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
messageName string false メッセージID
パラメータ データ型 説明
item EzMessage メッセージ
stampSheet string スタンプシート

delete

yield return gs2.Inbox.Delete(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    messageName,   //  メッセージID
);
return client.inbox.delete(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    messageName,   //  メッセージID
);

メッセージを削除する

プレゼントボックスの設定でメッセージを開封したときに自動的に削除するオプションを付けていない場合は、このAPIを使用して明示的にメッセージを削除する必要があります。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
messageName string true メッセージID
パラメータ データ型 説明

設定値

設定値

EzConfig

パラメータ データ型 必須 説明
key string false 名前
value string false

入手アクション

入手アクション

EzAcquireAction

パラメータ データ型 必須 説明
action string true スタンプシートで実行するアクションの種類
request string true 入手リクエストのJSON

GS2-Inventory

ゲーム内で使用する所持品の管理をサーバサイドで行いたい場合に使用できます。

所持品の管理をサーバサイドで行う最大の理由は不正行為の対策です。 セーブデータで所持品の数量を管理してしまうと、セーブデータの改ざんによって容易に所持品の増殖が行えてしまいます。 サーバサイドで管理することで、このような不正行為を行えなくすることができます。

GS2-Inventory では様々な種類の所持品を管理できます。 例えば、ガチャチケットやスタミナドリンクのような使用すると無くなってしまうコンテンツ。 キャラクターや、ゲーム内通貨などの資産。 強化素材や進化素材といった素材。などに対応します。

所持品を管理するためには2つのマスターデータを登録しておく必要があります。

インベントリモデル は所持品枠に関する情報を定義します。 インベントリモデル では所持品枠の初期容量や最大容量の設定ができます。

アイテムモデル はインベントごとに設定できるマスターデータであり、インベントリに格納できるアイテムの種類を定義します。 アイテムモデル ではインベントリ1枠でアイテムをスタックできる最大数量などを設定できます。 GS2のマスターデータとしてはアイテムの効能や用途を設定する必要はありません。 ですが、ゲーム内から使用できる 128 バイトと小さいデータですが、任意のデータを持たせることもできます。

アイテムを付与する際にはアイテムの有効期限を設定できます。 有効期限が切れたアイテムは自動的に削除されます。

アイテムを使用する際には明示的に有効期限を指定して消費することもできますが、 有効期限を指定しなければ、同一のアイテムの中で最も有効期限の近いアイテムから消費されます。

インベントリモデル

インベントリモデル

所持品を入れるカバンのような存在。 何種類のアイテムを入れられるか、キャパシティを決めることができます。 キャパシティは拡張が可能です。

EzInventoryModel

パラメータ データ型 必須 説明
name string true インベントリの種類名
metadata string false インベントリの種類のメタデータ
initialCapacity integer true インベントリの初期サイズ
maxCapacity integer true インベントリの最大サイズ

listInventoryModels

yield return gs2.Inventory.ListInventoryModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[InventoryModel] インベントリモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.inventory.listInventoryModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListInventoryModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[InventoryModel] インベントリモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

インベントリモデルの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[InventoryModel] インベントリモデルのリスト

getInventoryModel

yield return gs2.Inventory.GetInventoryModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string インベントリの種類名
            Debug.Log(r.Result.Item.Metadata); // string インベントリの種類のメタデータ
            Debug.Log(r.Result.Item.InitialCapacity); // integer インベントリの初期サイズ
            Debug.Log(r.Result.Item.MaxCapacity); // integer インベントリの最大サイズ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
);
return client.inventory.getInventoryModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetInventoryModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string インベントリの種類名
            // r.getResult()->getItem().getMetadata(); // string インベントリの種類のメタデータ
            // r.getResult()->getItem().getInitialCapacity(); // integer インベントリの初期サイズ
            // r.getResult()->getItem().getMaxCapacity(); // integer インベントリの最大サイズ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
);

インベントリ名を指定してインベントリモデルを取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
inventoryName string true インベントリの種類名
パラメータ データ型 説明
item EzInventoryModel インベントリモデル

アイテムモデル

アイテムモデル

アイテムの種類について定義したデータ。 アイテムのメタデータをはじめとして、最大所持可能数や表示順番を保持。

EzItemModel

パラメータ データ型 必須 説明
name string true アイテムモデルの種類名
metadata string false アイテムモデルの種類のメタデータ
stackingLimit long true スタック可能な最大数量
allowMultipleStacks boolean true スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
sortValue integer true 表示順番

listItemModels

yield return gs2.Inventory.ListItemModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[ItemModel] アイテムモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
);
return client.inventory.listItemModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListItemModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[ItemModel] アイテムモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
);

インベントリ名を指定してアイテムモデルの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
inventoryName string true インベントリの種類名
パラメータ データ型 説明
items list[ItemModel] アイテムモデルのリスト

getItemModel

yield return gs2.Inventory.GetItemModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string アイテムモデルの種類名
            Debug.Log(r.Result.Item.Metadata); // string アイテムモデルの種類のメタデータ
            Debug.Log(r.Result.Item.StackingLimit); // long スタック可能な最大数量
            Debug.Log(r.Result.Item.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            Debug.Log(r.Result.Item.SortValue); // integer 表示順番
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    itemName,   //  アイテムモデルの種類名
);
return client.inventory.getItemModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetItemModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string アイテムモデルの種類名
            // r.getResult()->getItem().getMetadata(); // string アイテムモデルの種類のメタデータ
            // r.getResult()->getItem().getStackingLimit(); // long スタック可能な最大数量
            // r.getResult()->getItem().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            // r.getResult()->getItem().getSortValue(); // integer 表示順番
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    itemName,   //  アイテムモデルの種類名
);

インベントリ名とアイテム名を指定してアイテムモデルを取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
inventoryName string true インベントリの種類名
itemName string true アイテムモデルの種類名
パラメータ データ型 説明
item EzItemModel

インベントリ

インベントリ

所持品を入れるカバンのような存在。 ゲームプレイヤーの持っているインベントリのサイズなどの情報を記録。

EzInventory

パラメータ データ型 必須 説明
inventoryId string true インベントリ
inventoryName string true インベントリモデル名
currentInventoryCapacityUsage integer true 現在のインベントリのキャパシティ使用量
currentInventoryMaxCapacity integer true 現在のインベントリの最大キャパシティ

listInventories

yield return gs2.Inventory.ListInventories(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Inventory] インベントリのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.inventory.listInventories(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListInventoriesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Inventory] インベントリのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

インベントリの一覧を取得

ゲームプレイヤーに紐付いたインベントリの一覧を取得します。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Inventory] インベントリのリスト
nextPageToken string リストの続きを取得するためのページトークン

getInventory

yield return gs2.Inventory.GetInventory(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.InventoryId); // string インベントリ
            Debug.Log(r.Result.Item.InventoryName); // string インベントリモデル名
            Debug.Log(r.Result.Item.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
            Debug.Log(r.Result.Item.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
);
return client.inventory.getInventory(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetInventoryResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getInventoryId(); // string インベントリ
            // r.getResult()->getItem().getInventoryName(); // string インベントリモデル名
            // r.getResult()->getItem().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
            // r.getResult()->getItem().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
);

インベントリ名を指定してインベントリの情報を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
inventoryName string true インベントリの種類名
パラメータ データ型 説明
item EzInventory インベントリ

有効期限ごとのアイテム所持数量

有効期限ごとのアイテム所持数量

同一アイテムの中で異なる有効期限ごとに所持数量を格納したデータ

EzItemSet

パラメータ データ型 必須 説明
itemSetId string true 有効期限ごとのアイテム所持数量
name string true アイテムセットを識別する名前
inventoryName string true インベントリの名前
itemName string true アイテムマスターの名前
count long true 所持数量
sortValue integer true 表示順番
expiresAt long true 有効期限

listItems

yield return gs2.Inventory.ListItems(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[ItemSet] 有効期限ごとのアイテム所持数量のリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.inventory.listItems(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListItemsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[ItemSet] 有効期限ごとのアイテム所持数量のリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

指定したインベントリ内の所有しているアイテム一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
inventoryName string true インベントリの種類名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[ItemSet] 有効期限ごとのアイテム所持数量のリスト
nextPageToken string リストの続きを取得するためのページトークン

getItem

yield return gs2.Inventory.GetItem(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[ItemSet] 有効期限毎の{model_name}
            Debug.Log(r.Result.ItemModel.Name); // string アイテムモデルの種類名
            Debug.Log(r.Result.ItemModel.Metadata); // string アイテムモデルの種類のメタデータ
            Debug.Log(r.Result.ItemModel.StackingLimit); // long スタック可能な最大数量
            Debug.Log(r.Result.ItemModel.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            Debug.Log(r.Result.ItemModel.SortValue); // integer 表示順番
            Debug.Log(r.Result.Inventory.InventoryId); // string インベントリ
            Debug.Log(r.Result.Inventory.InventoryName); // string インベントリモデル名
            Debug.Log(r.Result.Inventory.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
            Debug.Log(r.Result.Inventory.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    itemName,   //  アイテムモデルの種類名
);
return client.inventory.getItem(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetItemResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[ItemSet] 有効期限毎の{model_name}
            // r.getResult()->getItemModel().getName(); // string アイテムモデルの種類名
            // r.getResult()->getItemModel().getMetadata(); // string アイテムモデルの種類のメタデータ
            // r.getResult()->getItemModel().getStackingLimit(); // long スタック可能な最大数量
            // r.getResult()->getItemModel().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            // r.getResult()->getItemModel().getSortValue(); // integer 表示順番
            // r.getResult()->getInventory().getInventoryId(); // string インベントリ
            // r.getResult()->getInventory().getInventoryName(); // string インベントリモデル名
            // r.getResult()->getInventory().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
            // r.getResult()->getInventory().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    itemName,   //  アイテムモデルの種類名
);

インベントリ名とアイテム名を指定してアイテムを取得

アイテムは複数のスタックに分割されて応答されることがあります。 また、有効期限の異なるアイテムは、必ず別のスタックになります。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
inventoryName string true インベントリの種類名
itemName string true アイテムモデルの種類名
パラメータ データ型 説明
items list[ItemSet] 有効期限毎の{model_name}
itemModel EzItemModel アイテムモデル
inventory EzInventory インベントリ

getItemWithSignature

yield return gs2.Inventory.GetItemWithSignature(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[ItemSet] 有効期限毎の{model_name}
            Debug.Log(r.Result.ItemModel.Name); // string アイテムモデルの種類名
            Debug.Log(r.Result.ItemModel.Metadata); // string アイテムモデルの種類のメタデータ
            Debug.Log(r.Result.ItemModel.StackingLimit); // long スタック可能な最大数量
            Debug.Log(r.Result.ItemModel.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            Debug.Log(r.Result.ItemModel.SortValue); // integer 表示順番
            Debug.Log(r.Result.Inventory.InventoryId); // string インベントリ
            Debug.Log(r.Result.Inventory.InventoryName); // string インベントリモデル名
            Debug.Log(r.Result.Inventory.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
            Debug.Log(r.Result.Inventory.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
            Debug.Log(r.Result.Body); // string 署名対象のアイテムセット情報
            Debug.Log(r.Result.Signature); // string 署名
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    itemName,   //  アイテムモデルの種類名
    keyId,   //  署名の発行に使用する暗号鍵 のGRN
    itemSetName   //  アイテムセットを識別する名前(オプション値)
);
return client.inventory.getItemWithSignature(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetItemWithSignatureResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[ItemSet] 有効期限毎の{model_name}
            // r.getResult()->getItemModel().getName(); // string アイテムモデルの種類名
            // r.getResult()->getItemModel().getMetadata(); // string アイテムモデルの種類のメタデータ
            // r.getResult()->getItemModel().getStackingLimit(); // long スタック可能な最大数量
            // r.getResult()->getItemModel().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            // r.getResult()->getItemModel().getSortValue(); // integer 表示順番
            // r.getResult()->getInventory().getInventoryId(); // string インベントリ
            // r.getResult()->getInventory().getInventoryName(); // string インベントリモデル名
            // r.getResult()->getInventory().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
            // r.getResult()->getInventory().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
            // r.getResult()->getBody(); // string 署名対象のアイテムセット情報
            // r.getResult()->getSignature(); // string 署名
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの種類名
    itemName,   //  アイテムモデルの種類名
    keyId,   //  署名の発行に使用する暗号鍵 のGRN
    itemSetName   //  アイテムセットを識別する名前(オプション値)
);

インベントリ名とアイテム名を指定して署名付きアイテムを取得

このAPIによって、APIを呼び出した瞬間に該当アイテムを所有していることを証明することができる

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
inventoryName string true インベントリの種類名
itemName string true アイテムモデルの種類名
itemSetName string false アイテムセットを識別する名前
keyId string true 署名の発行に使用する暗号鍵 のGRN
パラメータ データ型 説明
items list[ItemSet] 有効期限毎の{model_name}
itemModel EzItemModel アイテムモデル
inventory EzInventory インベントリ
body string 署名対象のアイテムセット情報
signature string 署名

consume

yield return gs2.Inventory.Consume(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[ItemSet] 消費後の有効期限ごとのアイテム所持数量のリスト
            Debug.Log(r.Result.ItemModel.Name); // string アイテムモデルの種類名
            Debug.Log(r.Result.ItemModel.Metadata); // string アイテムモデルの種類のメタデータ
            Debug.Log(r.Result.ItemModel.StackingLimit); // long スタック可能な最大数量
            Debug.Log(r.Result.ItemModel.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            Debug.Log(r.Result.ItemModel.SortValue); // integer 表示順番
            Debug.Log(r.Result.Inventory.InventoryId); // string インベントリ
            Debug.Log(r.Result.Inventory.InventoryName); // string インベントリモデル名
            Debug.Log(r.Result.Inventory.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
            Debug.Log(r.Result.Inventory.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの名前
    itemName,   //  アイテムマスターの名前
    consumeCount,   //  消費する量
    itemSetName   //  アイテムセットを識別する名前(オプション値)
);
return client.inventory.consume(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncConsumeResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[ItemSet] 消費後の有効期限ごとのアイテム所持数量のリスト
            // r.getResult()->getItemModel().getName(); // string アイテムモデルの種類名
            // r.getResult()->getItemModel().getMetadata(); // string アイテムモデルの種類のメタデータ
            // r.getResult()->getItemModel().getStackingLimit(); // long スタック可能な最大数量
            // r.getResult()->getItemModel().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
            // r.getResult()->getItemModel().getSortValue(); // integer 表示順番
            // r.getResult()->getInventory().getInventoryId(); // string インベントリ
            // r.getResult()->getInventory().getInventoryName(); // string インベントリモデル名
            // r.getResult()->getInventory().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
            // r.getResult()->getInventory().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    inventoryName,   //  インベントリの名前
    itemName,   //  アイテムマスターの名前
    consumeCount,   //  消費する量
    itemSetName   //  アイテムセットを識別する名前(オプション値)
);

アイテムを消費

ゲーム内からアイテムを消費したい場合に使用します。

GS2のシステムと連携してアイテムの増減を行う場合はこのAPIを使用することはありません。 なぜなら、商品を購入するためや、クエストに参加するために必要な対価の場合は GS2-Showcase や GS2-Quest 上で対価を設定し、 商品の購入時やクエスト参加時に自動的に対価としてアイテムやその他のリソースが消費されるためです。

そのため、このAPIはGS2を介さない要素のためにアイテムを消費する場合に使用してください。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
inventoryName string true インベントリの名前
itemName string true アイテムマスターの名前
consumeCount long true 消費する量
itemSetName string false アイテムセットを識別する名前
パラメータ データ型 説明
items list[ItemSet] 消費後の有効期限ごとのアイテム所持数量のリスト
itemModel EzItemModel アイテムモデル
inventory EzInventory インベントリ

GS2-JobQueue

非同期処理を処理するためのジョブキューに関する処理を提供します。

ネームスペースごとにゲームプレイヤー1人に対して1つのジョブキューが提供されます。 GS2 内の各種処理は結果をジョブキューにはジョブを登録する形で処理が遅延処理されることがあります。 たとえば、ゲーム内ストアで商品を購入した時や、クエストをクリアしたときの報酬付与はジョブキューを経由して付与されます。

ジョブキューのジョブはFIFO(先入れ先出し)で処理されることが保証されています。 ジョブキューに登録されたジョブにはリトライ機能が実装されており、 例えばクエスト機能のサーバは正常に稼働しているにもかからわず、所持品管理のサーバが障害によって停止している場合も クエスト自体は遊ぶことができ、所持品の付与は所持品管理サーバが復旧後に実行できる。というような形で高可用性を実現するための仕組みです。

ジョブキューに新しいジョブが登録されたことを GS2-Gateway の提供するサーバプッシュ機能を使用して受け取ることができます。 ジョブキューを実行した際にはジョブキューが空になったかを応答値から判断できるようになっていますので、プッシュ通知を受け取ったらジョブをキューの終端まで実行する。というサイクルで処理を進めることができます。

ジョブ

ジョブ

ジョブには実行する GS2-Script とその引数、リトライ回数が記録されています。

EzJob

パラメータ データ型 必須 説明
jobId string true ジョブ
scriptId string true ジョブの実行に使用するスクリプト のGRN
args string true 引数
currentRetryCount integer true 現在のリトライ回数
maxTryCount integer true 最大試行回数

run

yield return gs2.JobQueue.Run(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.JobId); // string ジョブ
            Debug.Log(r.Result.Item.ScriptId); // string ジョブの実行に使用するスクリプト のGRN
            Debug.Log(r.Result.Item.Args); // string 引数
            Debug.Log(r.Result.Item.CurrentRetryCount); // integer 現在のリトライ回数
            Debug.Log(r.Result.Item.MaxTryCount); // integer 最大試行回数
            Debug.Log(r.Result.Result.TryNumber); // integer 試行回数
            Debug.Log(r.Result.Result.StatusCode); // integer ステータスコード
            Debug.Log(r.Result.Result.Result); // string レスポンスの内容
            Debug.Log(r.Result.Result.TryAt); // long 実行日時
            Debug.Log(r.Result.IsLastJob); // boolean None
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.jobQueue.run(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncRunResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getJobId(); // string ジョブ
            // r.getResult()->getItem().getScriptId(); // string ジョブの実行に使用するスクリプト のGRN
            // r.getResult()->getItem().getArgs(); // string 引数
            // r.getResult()->getItem().getCurrentRetryCount(); // integer 現在のリトライ回数
            // r.getResult()->getItem().getMaxTryCount(); // integer 最大試行回数
            // r.getResult()->getResult().getTryNumber(); // integer 試行回数
            // r.getResult()->getResult().getStatusCode(); // integer ステータスコード
            // r.getResult()->getResult().getResult(); // string レスポンスの内容
            // r.getResult()->getResult().getTryAt(); // long 実行日時
            // r.getResult()->getIsLastJob(); // boolean None
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

タスクキューのジョブを実行します。

タスクキューのプッシュ通知設定をすることでタスクキューに新しくジョブが追加されたときにプッシュ通知を受けることができます。 定期的にこのAPIを呼び出すか、プッシュ通知をトリガーしてこのAPIを呼び出してください。 isLastJob が false を返している間は繰り返し実行してください。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
パラメータ データ型 説明
item EzJob ジョブ
result EzJobResultBody ジョブの実行結果
isLastJob boolean

ジョブ

ジョブ

EzJobEntry

パラメータ データ型 必須 説明
scriptId string true スクリプト のGRN
args string true 引数
maxTryCount integer true 最大試行回数

ジョブの実行結果

ジョブの実行結果

ジョブとして実行した GS2-Script の実行結果

EzJobResultBody

パラメータ データ型 必須 説明
tryNumber integer true 試行回数
statusCode integer true ステータスコード
result string true レスポンスの内容
tryAt long true 実行日時

GS2-Limit

回数制限に関する機能を実装するときに使用します。 回数制限に使用するカウンターの操作や管理をサーバで行うことで、不正行為を防ぐことができます。

GS2 では、クエストの挑戦や商品の購入など、様々な箇所で回数制限を実装できるようになっています。 また、カウンターにはリセットタイミングを設定でき、これによって、毎日1回だけ挑戦できるクエストや、毎週1回だけ購入できる商品などを実現できます。

カウンター

カウンター

EzCounter

パラメータ データ型 必須 説明
counterId string true カウンター
name string true カウンターの名前
count integer true カウント値
createdAt long true 作成日時
updatedAt long true 最終更新日時

listCounters

yield return gs2.Limit.ListCounters(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Counter] カウンターのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類の名前(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.limit.listCounters(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCountersResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Counter] カウンターのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類の名前(オプション値)
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

ゲームプレイヤーに紐づく回数制限カウンターの一覧を取得

回数制限名は省略可能です。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
limitName string false 回数制限の種類の名前
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Counter] カウンターのリスト
nextPageToken string リストの続きを取得するためのページトークン

getCounter

yield return gs2.Limit.GetCounter(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.CounterId); // string カウンター
            Debug.Log(r.Result.Item.Name); // string カウンターの名前
            Debug.Log(r.Result.Item.Count); // integer カウント値
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類の名前
    counterName,   //  カウンターの名前
);
return client.limit.getCounter(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCounterResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getCounterId(); // string カウンター
            // r.getResult()->getItem().getName(); // string カウンターの名前
            // r.getResult()->getItem().getCount(); // integer カウント値
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類の名前
    counterName,   //  カウンターの名前
);

回数制限名とカウンター名を指定してゲームプレイヤーに紐づく回数制限カウンターを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
limitName string true 回数制限の種類の名前
counterName string true カウンターの名前
パラメータ データ型 説明
item EzCounter カウンター

countUp

yield return gs2.Limit.CountUp(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.CounterId); // string カウンター
            Debug.Log(r.Result.Item.Name); // string カウンターの名前
            Debug.Log(r.Result.Item.Count); // integer カウント値
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類の名前
    counterName,   //  カウンターの名前
    countUpValue,   //  カウントアップする量(オプション値)
    maxValue   //  カウントアップを許容する最大値 を入力してください(オプション値)
);
return client.limit.countUp(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCountUpResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getCounterId(); // string カウンター
            // r.getResult()->getItem().getName(); // string カウンターの名前
            // r.getResult()->getItem().getCount(); // integer カウント値
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類の名前
    counterName,   //  カウンターの名前
    countUpValue,   //  カウントアップする量(オプション値)
    maxValue   //  カウントアップを許容する最大値 を入力してください(オプション値)
);

回数制限名とカウンター名を指定してゲームプレイヤーに紐づく回数制限カウンターをカウントアップ

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
limitName string true 回数制限の種類の名前
counterName string true カウンターの名前
countUpValue integer false カウントアップする量
maxValue integer false カウントアップを許容する最大値 を入力してください
パラメータ データ型 説明
item EzCounter カウントを増やしたカウンター

回数制限の種類

回数制限の種類

記録する回数のバリエーション・リセットタイミングごとに種類を定義します。

EzLimitModel

パラメータ データ型 必須 説明
limitModelId string true 回数制限の種類
name string true 回数制限の種類名
metadata string false 回数制限の種類のメタデータ
resetType string true リセットタイミング
resetDayOfMonth integer true リセットをする日にち
resetDayOfWeek string true リセットする曜日
resetHour integer true リセット時刻

listLimitModels

yield return gs2.Limit.ListLimitModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[LimitModel] 回数制限の種類のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.limit.listLimitModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListLimitModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[LimitModel] 回数制限の種類のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

回数制限モデルの一覧を取得

近日実施する予定のイベントに関する回数制限設定をしたことで、イベントの情報などが露呈する可能性があります。 回数制限モデルの持つ情報をゲーム内から使用しない場合は 本APIへのアクセス権を剥奪しておく方が安全です。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[LimitModel] 回数制限の種類のリスト

getLimitModel

yield return gs2.Limit.GetLimitModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.LimitModelId); // string 回数制限の種類
            Debug.Log(r.Result.Item.Name); // string 回数制限の種類名
            Debug.Log(r.Result.Item.Metadata); // string 回数制限の種類のメタデータ
            Debug.Log(r.Result.Item.ResetType); // string リセットタイミング
            Debug.Log(r.Result.Item.ResetDayOfMonth); // integer リセットをする日にち
            Debug.Log(r.Result.Item.ResetDayOfWeek); // string リセットする曜日
            Debug.Log(r.Result.Item.ResetHour); // integer リセット時刻
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類名
);
return client.limit.getLimitModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetLimitModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getLimitModelId(); // string 回数制限の種類
            // r.getResult()->getItem().getName(); // string 回数制限の種類名
            // r.getResult()->getItem().getMetadata(); // string 回数制限の種類のメタデータ
            // r.getResult()->getItem().getResetType(); // string リセットタイミング
            // r.getResult()->getItem().getResetDayOfMonth(); // integer リセットをする日にち
            // r.getResult()->getItem().getResetDayOfWeek(); // string リセットする曜日
            // r.getResult()->getItem().getResetHour(); // integer リセット時刻
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    limitName,   //  回数制限の種類名
);

回数制限名を指定して回数制限モデルを取得

近日実施する予定のイベントに関する回数制限設定をしたことで、イベントの情報などが露呈する可能性があります。 回数制限モデルの持つ情報をゲーム内から使用しない場合は 本APIへのアクセス権を剥奪しておく方が安全です。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
limitName string true 回数制限の種類名
パラメータ データ型 説明
item EzLimitModel 回数制限の種類

GS2-Lock

排他処理を実現するために使用します。 排他処理は同一ゲームプレイヤー内でのみ使用できます。そのため、他プレイヤーとの共有リソースのロックには使用できません。 GS2のサービス間連携の際には自動的にロックを取得して処理が実行されます。

GS2のサービス間連携との衝突を避けたい処理を実装したければ、ネームスペースに x_gs2_distribute を指定して、ロックしたいリソースのGRNをキーにロックを取得してください。 このネームスペースに関しては事前にネームスペースを作成することなく利用できます。

ミューテックス

ミューテックス

参照カウント付きのロックオブジェクト。 たとえロック中でも同一トランザクションIDによるロック取得の場合は参照カウントが上昇し、ロックを取得できます。 アンロックする場合も同様に、ロックを取得したときに指定したトランザクションIDを指定してアンロックしなければエラーになります。 複数回ロックを取得して参照カウントが上昇している場合は、参照カウントが0になるまでアンロックするまで実際には開放されません。

EzMutex

パラメータ データ型 必須 説明
mutexId string true ミューテックス
propertyId string true プロパティID
transactionId string true ロックを取得したトランザクションID
referenceCount integer true 参照回数
ttlAt long true ロックの有効期限

lock

yield return gs2.Lock.Lock(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.MutexId); // string ミューテックス
            Debug.Log(r.Result.Item.PropertyId); // string プロパティID
            Debug.Log(r.Result.Item.TransactionId); // string ロックを取得したトランザクションID
            Debug.Log(r.Result.Item.ReferenceCount); // integer 参照回数
            Debug.Log(r.Result.Item.TtlAt); // long ロックの有効期限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリー名
    propertyId,   //  プロパティID
    transactionId,   //  ロックを取得するトランザクションID
    ttl,   //  ロックを取得する期限(秒)
);
return client.lock.lock(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncLockResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getMutexId(); // string ミューテックス
            // r.getResult()->getItem().getPropertyId(); // string プロパティID
            // r.getResult()->getItem().getTransactionId(); // string ロックを取得したトランザクションID
            // r.getResult()->getItem().getReferenceCount(); // integer 参照回数
            // r.getResult()->getItem().getTtlAt(); // long ロックの有効期限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリー名
    propertyId,   //  プロパティID
    transactionId,   //  ロックを取得するトランザクションID
    ttl,   //  ロックを取得する期限(秒)
);

ロックを取得

ttl で指定した秒数 プロパティID のリソースをロックします。 ロックする際には トランザクションID を指定する必要があります。 異なる トランザクションID による同一 プロパティID に対するロック取得は失敗します。 同一トランザクションからのロック取得リクエストの場合は参照カウントを増やします。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリー名
propertyId string true プロパティID
transactionId string true ロックを取得するトランザクションID
ttl long true ロックを取得する期限(秒)
パラメータ データ型 説明
item EzMutex ミューテックス

unlock

yield return gs2.Lock.Unlock(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.MutexId); // string ミューテックス
            Debug.Log(r.Result.Item.PropertyId); // string プロパティID
            Debug.Log(r.Result.Item.TransactionId); // string ロックを取得したトランザクションID
            Debug.Log(r.Result.Item.ReferenceCount); // integer 参照回数
            Debug.Log(r.Result.Item.TtlAt); // long ロックの有効期限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリー名
    propertyId,   //  プロパティID
    transactionId,   //  ロックを取得したトランザクションID
);
return client.lock.unlock(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnlockResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getMutexId(); // string ミューテックス
            // r.getResult()->getItem().getPropertyId(); // string プロパティID
            // r.getResult()->getItem().getTransactionId(); // string ロックを取得したトランザクションID
            // r.getResult()->getItem().getReferenceCount(); // integer 参照回数
            // r.getResult()->getItem().getTtlAt(); // long ロックの有効期限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリー名
    propertyId,   //  プロパティID
    transactionId,   //  ロックを取得したトランザクションID
);

ロックを解放

ロックの解放には同一 トランザクションID から解放する必要があります。 ロックの取得時に再入を行った場合は同一回数ロックの解放を行い、参照カウントが0になったタイミングで実際に解放が行われます。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリー名
propertyId string true プロパティID
transactionId string true ロックを取得したトランザクションID
パラメータ データ型 説明
item EzMutex ミューテックス

GS2-Lottery

抽選処理を実現するために使用します。

抽選処理は排出確率テーブルを元に行われます。 排出確率テーブルには、景品ごとの排出される重みを設定します。 例えば、景品Aに3を設定し、景品Bに1を設定した場合、景品Aの排出確率は75%、景品Bは排出確率は25%となります。

また、景品として他の排出確率テーブルを設定することもできます。 あらかじめSSR、SR、Rなどの同一レアリティごとに排出確率テーブルを用意しておき、それらを景品とした排出確率テーブルをつくることで、レアリティごとの排出確率を容易に設定できます。

抽選処理には2つのモードがあり、抽選の種類で設定できます。 1つ目は毎回変わらない確率で一様に抽選処理を行うモード、2つ目はボックスガチャモードです。 ボックスガチャとは、抽選処理を行うごとに景品を箱から取り出していき、最初に箱に入れた数と同回数抽選を行うと、必ずすべての景品が手に入るという方式です。 モードにボックスガチャを設定した場合は、排出テーブルに設定した重みの数だけ箱に景品が入った状態から抽選が始まります。

ボックス

ボックス

排出済みの景品を管理します。 排出済みの景品は、排出確率テーブルに設定された重みの合計に対するインデックスで管理されます。 そのため、抽選を行った後で排出確率テーブルの重みを変更すると排出済み景品との不整合が発生します。

EzBox

パラメータ データ型 必須 説明
prizeTableName string true 排出確率テーブル名
drawnIndexes list[integer] true 排出済み景品のインデックスのリスト

describeBoxes

yield return gs2.Lottery.DescribeBoxes(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Box] ボックスのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.lottery.describeBoxes(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeBoxesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Box] ボックスのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

ボックスの排出済みアイテム情報一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Box] ボックスのリスト
nextPageToken string リストの続きを取得するためのページトークン

getBox

yield return gs2.Lottery.GetBox(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.BoxId); // string ボックス
            Debug.Log(r.Result.Item.PrizeTableName); // string 排出確率テーブル名
            Debug.Log(r.Result.Item.Items); // list[BoxItem] ボックスから取り出したアイテムのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    prizeTableName,   //  排出確率テーブル名
);
return client.lottery.getBox(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetBoxResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getBoxId(); // string ボックス
            // r.getResult()->getItem().getPrizeTableName(); // string 排出確率テーブル名
            // r.getResult()->getItem().getItems(); // list[BoxItem] ボックスから取り出したアイテムのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    prizeTableName,   //  排出確率テーブル名
);

ボックスの排出済みアイテム情報を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
prizeTableName string true 排出確率テーブル名
パラメータ データ型 説明
item EzBoxItems ボックスから取り出したアイテムのリスト

resetBox

yield return gs2.Lottery.ResetBox(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    prizeTableName,   //  排出確率テーブル名
);
return client.lottery.resetBox(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncResetBoxResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    prizeTableName,   //  排出確率テーブル名
);

ボックスのリセット

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
prizeTableName string true 排出確率テーブル名
パラメータ データ型 説明

抽選処理

抽選処理

listProbabilities

yield return gs2.Lottery.ListProbabilities(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Probability] 景品の当選確率リスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    lotteryName,   //  抽選モデルの種類名
);
return client.lottery.listProbabilities(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListProbabilitiesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Probability] 景品の当選確率リスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    lotteryName,   //  抽選モデルの種類名
);

排出確率を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
lotteryName string true 抽選モデルの種類名
パラメータ データ型 説明
items list[Probability] 景品の当選確率リスト

排出レート

排出レート

通常抽選ではすべてのゲームプレイヤーに対して同じ確率を応答します。 ボックス抽選ではボックスの中身の残りを考慮したゲームプレイヤーごとに異なる確率を応答します。

EzProbability

パラメータ データ型 必須 説明
prize DrawnPrize true 景品の種類
rate float true 排出確率(0.0〜1.0)

入手アクション

入手アクション

EzAcquireAction

パラメータ データ型 必須 説明
action string true スタンプシートで実行するアクションの種類
request string true 入手リクエストのJSON

排出された景品

排出された景品

EzDrawnPrize

パラメータ データ型 必須 説明
acquireActions list[AcquireAction] false 入手アクションのリスト

ボックスから取り出したアイテム

ボックスから取り出したアイテム

EzBoxItem

パラメータ データ型 必須 説明
acquireActions list[AcquireAction] false 入手アクションのリスト
remaining integer true 残り数量
initial integer true 初期数量

ボックスから取り出したアイテムのリスト

ボックスから取り出したアイテムのリスト

EzBoxItems

パラメータ データ型 必須 説明
boxId string true ボックス
prizeTableName string true 排出確率テーブル名
items list[BoxItem] true ボックスから取り出したアイテムのリスト

設定値

設定値

EzConfig

パラメータ データ型 必須 説明
key string false 名前
value string false

GS2-Matchmaking

対戦相手や協力相手を実現するサービスです。

マッチメイキングの流れは以下です。

ホストがギャザリングの作成 ↓ 参加者が条件にみあうギャザリングを検索 ↓ 規定人数が集まったらマッチメイキング完了

GS2-Matchmaking はこの流れのうち 参加者が条件にみあうギャザリングを検索 に関してできるだけ多くのニーズをみたせるよう設計されています。 ここでは、ユースケースを交えつつ、その設計例を解説します。

ゲーム内には、カジュアルプレイヤー向けと、コアゲーマー向けの2種類のゲームモードがあります。 これらのプレイヤーを混ぜることなくマッチメイキング処理を行いたいとします。

ギャザリングを作成する際にも、ギャザリングを検索する際にも、最大5つの属性値を指定できます。 ギャザリングを作成する際には募集するプレイヤーが持つ属性値の範囲を指定し、 ギャザリングを検索する際には、自身の属性値の値を指定して処理依頼をします。

つまり、ホストがギャザリングを作成する際に 属性値1 に募集するゲームモードを指定し、 検索する側も自分が参加したいゲームモードを 属性値1 に指定することで、希望するゲームモードが同じプレイヤー同士がマッチメイキングされます。

ホストはギャザリングを作成する際に 属性値2 に募集するレベルの最小値と最大値を指定します。 検索する側は自分のレベルを 属性値2 に指定することで、同じレベル帯のプレイヤー同士がマッチメイキングされます。

複数の属性値を指定した場合はすべての属性値の範囲をみたす相手を探すよう処理されます。

同じレベル帯によるマッチングを実現するため、 属性値2 に指定するためのレーティングも提供しています。 レーティングの計算処理には Glicko-2 rating system をベースとした計算アルゴリズムを採用しています。 レーティング値の初期値は1500で、レーティングの値が離れた相手に勝利するほど上昇幅は大きく、同じく負けた側は減少幅は大きくなります。 レーティングは3人以上の対戦にも対応しており、個人戦の場合は順位で、チーム戦の場合は勝ち負けでレーティングを計算することができます。 チーム戦の場合でも活躍度などでレートの増減に差をつけたい場合は順位で計算することができます。

最初は狭い範囲で募集し、なるべく同じレベルのプレイヤー同士でマッチメイキングするが、なかなか対戦相手が見つからない場合、募集するレベル帯を広げて募集したいとします。 ギャザリングを作成しておよそ1分ごとに発火する GS2-Script イベントがあります。 このスクリプトにて、ギャザリングの属性値の範囲を緩和することで、徐々に希望する条件を緩和する処理を実装できます。

ギャザリングを作成するときのオプションとして、参加を許可するユーザIDリストを指定できます。 これを使い、フレンドのユーザIDリストを指定することで、参加者を限定することができます。

ギャザリングの作成時・検索時にユーザIDのブラックリストを指定できます。 検索時に指定したブラックリストは、条件に一致するギャザリングを発見し、参加したギャザリングのブラックリストに加えられます。 検索する際に自身がブラックリストに入っている場合はマッチメイキングの対象から除外されます。

ゲームによっては盾役1人、回復役1人、攻撃役2人でマッチメイキングを行いたいことがあります。 このときに使用できるのが ロール属性 です。

盾役として tank を、回復役として healer を、攻撃役として attacker というロールを想定します。 ギャザリングを作成するときに各ロールの募集人数を設定します。 ギャザリングの検索時に自分のロールに設定することで、ロールに関して空きのあるギャザリングだけが参加可能なギャザリングとして処理されます。

募集ロールにはエイリアスを設定することもできます。 例えば、 tank を更に具体的なロールで表現し、 paladinwarriordark_knight のいずれかとしてギャザリングの検索を行うとします。 ギャザリングを作成するときに、 tank のエイリアスに paladindark_knight を指定した場合、 warrior は参加できないギャザリングが作成できます。

マッチメイキング完了後に、1名が離脱し 1名だけ補充したいときに使用します。 このときに使用するのがパーティトークンです。パーティトークンを発行するにはパーティを編成するプレイヤーのプレイヤートークンです。 プレイヤートークンはプレイヤー自身が自分の代わりにパーティの代表者がマッチメイキングを行うことを許可するトークンで、3分間の有効期限があります。 パーティメンバーはそれぞれ、プレイヤートークンを発行するAPIに依頼をしてプレイヤートークンを入手し、パーティの代表者に送信します。 パーティの代表者はパーティメンバーからプレイヤートークンを受け取り、3分以内にパーティトークン発行APIに送信することで、パーティトークンを入手できます。 パーティトークンには10分の有効期限があり、10分以内にパーティトークンを使用してギャザリング作成処理または、ギャザリング検索処理を呼び出します。 こうすることで、パーティメンバー全員が参加した状態のギャザリングを作成、またはパーティメンバー全員が参加できるギャザリングに参加します。

4 vs 4 で対戦するゲームで、事前に編成したパーティを敵味方に分散することなく対戦したいことがあります。 たとえば、事前に3人で編成したパーティと、事前に4人で編成したパーティ、そして1人の野良プレイヤーをマッチメイキングして、 事前に3人で編成したパーティ + 1人の野良プレイヤー vs 事前に4人で編成したパーティ という対戦を実現したいとします。 このようなケースでは、まずは4人のマッチメイキングを実行します。 すると、3人で編成したパーティ + 1人の野良プレイヤー事前に4人で編成したパーティ の2つのギャザリングができます。 その後、それぞれのパーティの代表者が 定員2人のマッチメイキングをおこない、パーティ同士がマッチメイキングされます。 こうすることで 事前に3人で編成したパーティ + 1人の野良プレイヤー vs 事前に4人で編成したパーティ を実現できます。

マッチメイキングが完了していない状態でプレイヤー間のやりとりを必要とすることがあります。 GS2-Matchmaking では、ギャザリングの作成時にプレイヤー間の通信をする手段として2種類の方法を提供します。

募集が終わっていない状態でも、プレイヤー間のでメタデータを低頻度で交換したい場合は前者を、 募集しながらNPCを交えたり人数が不足した状態でゲームを遊ばせたい場合は後者を使用します。

低頻度・高頻度の判断基準として使用できるのが GS2-Chat の持つ制限です。 GS2-Chat は1つのチャットルームに対して秒間3回しか発言ができません。この頻度を超える場合は GS2-Realtime を使用してください。

マッチメイキングが完了したときに GS2-Gateway を使用したゲーム内プッシュ通知GS2-JobQueue によるジョブ登録 でプレイヤーにマッチメイキングの完了を知らせることができます。 また、GS2-Script を使用して任意のスクリプトを実行することもできます。 GS2-Realtime を使用してマッチメイキング後の対戦・協力プレイを実現する場合は、マッチメイキング完了後に実行される GS2-Script で GS2-Realtime のギャザリングを作成し、そのギャザリングのIPアドレス・ポートの情報を GS2-Gateway を使用したゲーム内プッシュ通知GS2-JobQueue によるジョブ登録 を使用して通知することで、ゲームサーバに誘導できます。

ギャザリング

ギャザリング

編成中・編成されたギャザリングの参加条件や参加メンバーに関する情報を保持。

EzGathering

パラメータ データ型 必須 説明
gatheringId string true ギャザリング
name string true ギャザリング名
attributeRanges list[AttributeRange] false 募集条件
capacityOfRoles list[CapacityOfRole] true 参加者
allowUserIds list[string] true 参加を許可するユーザIDリスト
metadata string false メタデータ
expiresAt long false ギャザリングの有効期限
createdAt long true 作成日時
updatedAt long true 最終更新日時

createGathering

yield return gs2.Matchmaking.CreateGathering(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
            Debug.Log(r.Result.Item.Name); // string ギャザリング名
            Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
            Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    player,   //  自身のプレイヤー情報
    capacityOfRoles,   //  参加者
    allowUserIds,   //  参加を許可するユーザIDリスト
    attributeRanges,   //  募集条件(オプション値)
    expiresAt   //  ギャザリングの有効期限(オプション値)
);
return client.matchmaking.createGathering(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateGatheringResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getGatheringId(); // string ギャザリング
            // r.getResult()->getItem().getName(); // string ギャザリング名
            // r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
            // r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    player,   //  自身のプレイヤー情報
    capacityOfRoles,   //  参加者
    allowUserIds,   //  参加を許可するユーザIDリスト
    attributeRanges,   //  募集条件(オプション値)
    expiresAt   //  ギャザリングの有効期限(オプション値)
);

ギャザリングを新規作成

Player に指定する自身のプレイヤー情報のユーザIDは省略できます。 expiresAtを指定することでギャザリングの有効期限を設定することができます。 有効期限を用いない場合、古いギャザリングが残り続けマッチングが成立したときには、 ユーザーがゲームから離脱している可能性があります。 有効期限を用いる場合は、有効期限が来るたびにユーザーにギャザリングの再作成を促す仕組みにしてください。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
player Player true 自身のプレイヤー情報
attributeRanges list[AttributeRange] false 募集条件
capacityOfRoles list[CapacityOfRole] true 参加者
allowUserIds list[string] true 参加を許可するユーザIDリスト
expiresAt long false ギャザリングの有効期限
パラメータ データ型 説明
item EzGathering ギャザリング

updateGathering

yield return gs2.Matchmaking.UpdateGathering(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
            Debug.Log(r.Result.Item.Name); // string ギャザリング名
            Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
            Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    gatheringName,   //  ギャザリング名
    attributeRanges   //  募集条件(オプション値)
);
return client.matchmaking.updateGathering(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateGatheringResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getGatheringId(); // string ギャザリング
            // r.getResult()->getItem().getName(); // string ギャザリング名
            // r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
            // r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    gatheringName,   //  ギャザリング名
    attributeRanges   //  募集条件(オプション値)
);

ギャザリングの募集条件を変更

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
gatheringName string true ギャザリング名
attributeRanges list[AttributeRange] false 募集条件
パラメータ データ型 説明
item EzGathering ギャザリング

doMatchmaking

yield return gs2.Matchmaking.DoMatchmaking(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
            Debug.Log(r.Result.Item.Name); // string ギャザリング名
            Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
            Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
            Debug.Log(r.Result.MatchmakingContextToken); // string マッチメイキングの状態を保持するトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    player,   //  自身のプレイヤー情報
    matchmakingContextToken   //  検索の再開に使用する マッチメイキングの状態を保持するトークン(オプション値)
);
return client.matchmaking.doMatchmaking(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDoMatchmakingResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getGatheringId(); // string ギャザリング
            // r.getResult()->getItem().getName(); // string ギャザリング名
            // r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
            // r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
            // r.getResult()->getMatchmakingContextToken(); // string マッチメイキングの状態を保持するトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    player,   //  自身のプレイヤー情報
    matchmakingContextToken   //  検索の再開に使用する マッチメイキングの状態を保持するトークン(オプション値)
);

すでに存在する中で、自分が参加できるギャザリングを探して参加

一定時間 検索を行い、対象が見つからなかったときには マッチメイキングの状態を保持するトークン を返す。 次回 マッチメイキングの状態を保持するトークン をつけて再度リクエストを出すことで、前回の続きから検索処理を再開できる。 すべてのギャザリングを検索したが、参加できるギャザリングが存在しなかった場合はギャザリングもトークンもどちらも null が応答される。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
player Player true 自身のプレイヤー情報
matchmakingContextToken string false 検索の再開に使用する マッチメイキングの状態を保持するトークン
パラメータ データ型 説明
item EzGathering ギャザリング
matchmakingContextToken string マッチメイキングの状態を保持するトークン

getGathering

yield return gs2.Matchmaking.GetGathering(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
            Debug.Log(r.Result.Item.Name); // string ギャザリング名
            Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
            Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    gatheringName,   //  ギャザリング名
);
return client.matchmaking.getGathering(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetGatheringResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getGatheringId(); // string ギャザリング
            // r.getResult()->getItem().getName(); // string ギャザリング名
            // r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
            // r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    gatheringName,   //  ギャザリング名
);

最新のギャザリングの状態を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
gatheringName string true ギャザリング名
パラメータ データ型 説明
item EzGathering ギャザリング

cancelMatchmaking

yield return gs2.Matchmaking.CancelMatchmaking(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
            Debug.Log(r.Result.Item.Name); // string ギャザリング名
            Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
            Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
            Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    gatheringName,   //  ギャザリング名
);
return client.matchmaking.cancelMatchmaking(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCancelMatchmakingResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getGatheringId(); // string ギャザリング
            // r.getResult()->getItem().getName(); // string ギャザリング名
            // r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
            // r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
            // r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    gatheringName,   //  ギャザリング名
);

マッチメイキングをキャンセルし、参加中のギャザリングから離脱。

ギャザリングから離脱する前にマッチメイキングが完了した場合は、NotFoundException(404エラー) が発生し失敗します。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
gatheringName string true ギャザリング名
パラメータ データ型 説明
item EzGathering ギャザリング

レーティングモデル

レーティングモデル

EzRatingModel

パラメータ データ型 必須 説明
name string true レーティングの種類名
metadata string false レーティングの種類のメタデータ
volatility integer true レート値の変動の大きさ

listRatingModels

yield return gs2.Matchmaking.ListRatingModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[RatingModel] レーティングモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.matchmaking.listRatingModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListRatingModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[RatingModel] レーティングモデルのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

レーティングモデルの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[RatingModel] レーティングモデルのリスト

getRatingModel

yield return gs2.Matchmaking.GetRatingModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string レーティングの種類名
            Debug.Log(r.Result.Item.Metadata); // string レーティングの種類のメタデータ
            Debug.Log(r.Result.Item.Volatility); // integer レート値の変動の大きさ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ratingName,   //  レーティングの種類名
);
return client.matchmaking.getRatingModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRatingModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string レーティングの種類名
            // r.getResult()->getItem().getMetadata(); // string レーティングの種類のメタデータ
            // r.getResult()->getItem().getVolatility(); // integer レート値の変動の大きさ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ratingName,   //  レーティングの種類名
);

レーティング名を指定してレーティングモデルを取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
ratingName string true レーティングの種類名
パラメータ データ型 説明
item EzRatingModel レーティングモデル

ギャザリング参加可能な属性値の範囲

ギャザリング参加可能な属性値の範囲

EzAttributeRange

パラメータ データ型 必須 説明
name string true 属性名
min integer true ギャザリング参加可能な属性値の最小値
max integer true ギャザリング参加可能な属性値の最大値

ロールごとのキャパシティ

ロールごとのキャパシティ

EzCapacityOfRole

パラメータ データ型 必須 説明
roleName string true ロール名
roleAliases list[string] false ロール名の別名リスト
capacity integer true 募集人数
participants list[Player] true 参加者のプレイヤー情報リスト

プレイヤーの属性値

プレイヤーの属性値

EzAttribute

パラメータ データ型 必須 説明
name string true 属性名
value integer true 属性値

プレイヤー情報

プレイヤー情報

EzPlayer

パラメータ データ型 必須 説明
userId string false ユーザーID
attributes list[Attribute] false 属性値のリスト
roleName string true ロール名
denyUserIds list[string] true 参加を拒否するユーザIDリスト

レーティング

レーティング

ゲームの強さを表す数値を保持。

EzRating

パラメータ データ型 必須 説明
ratingId string true レーティング
name string true レーティング名
userId string true ユーザーID
rateValue float true
createdAt long true 作成日時
updatedAt long true 最終更新日時

listRatings

yield return gs2.Matchmaking.ListRatings(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Rating] レーティングのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.matchmaking.listRatings(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListRatingsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Rating] レーティングのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

レーティング名を指定してレーティングを取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Rating] レーティングのリスト
nextPageToken string リストの続きを取得するためのページトークン

getRating

yield return gs2.Matchmaking.GetRating(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.RatingId); // string レーティング
            Debug.Log(r.Result.Item.Name); // string レーティング名
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RateValue); // float None
            Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ratingName,   //  レーティング名
);
return client.matchmaking.getRating(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRatingResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getRatingId(); // string レーティング
            // r.getResult()->getItem().getName(); // string レーティング名
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRateValue(); // float None
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ratingName,   //  レーティング名
);

投票用紙を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
ratingName string true レーティング名
パラメータ データ型 説明
item EzRating レーティング

対戦結果

対戦結果

順位とユーザIDの組み合わせ。 引き分けの場合は同じ順位を指定します。 チーム戦の場合はチームメイトは同じ順位になるようにしてください。

EzGameResult

パラメータ データ型 必須 説明
rank integer true 順位
userId string true ユーザーID

投票用紙

投票用紙

EzBallot

パラメータ データ型 必須 説明
userId string true ユーザーID
ratingName string true レーティング計算に使用するレーティング名
gatheringName string true 投票対象のギャザリング名
numberOfPlayer integer true 参加人数

署名済みの投票用紙

署名済みの投票用紙

EzSignedBallot

パラメータ データ型 必須 説明
body string true 投票用紙の署名対象のデータ
signature string true 投票用紙の署名

投票状況

投票状況

createVote

yield return gs2.Matchmaking.CreateVote(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RatingName); // string レーティング計算に使用するレーティング名
            Debug.Log(r.Result.Item.GatheringName); // string 投票対象のギャザリング名
            Debug.Log(r.Result.Item.NumberOfPlayer); // integer 参加人数
            Debug.Log(r.Result.Body); // string 署名対象のデータ
            Debug.Log(r.Result.Signature); // string 署名データ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ratingName,   //  レーティング名
    gatheringName,   //  投票対象のギャザリング名
);
return client.matchmaking.createVote(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateVoteResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRatingName(); // string レーティング計算に使用するレーティング名
            // r.getResult()->getItem().getGatheringName(); // string 投票対象のギャザリング名
            // r.getResult()->getItem().getNumberOfPlayer(); // integer 参加人数
            // r.getResult()->getBody(); // string 署名対象のデータ
            // r.getResult()->getSignature(); // string 署名データ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ratingName,   //  レーティング名
    gatheringName,   //  投票対象のギャザリング名
);

投票用紙を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
ratingName string true レーティング名
gatheringName string true 投票対象のギャザリング名
パラメータ データ型 説明
item EzBallot 投票用紙
body string 署名対象のデータ
signature string 署名データ

vote

yield return gs2.Matchmaking.Vote(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RatingName); // string レーティング計算に使用するレーティング名
            Debug.Log(r.Result.Item.GatheringName); // string 投票対象のギャザリング名
            Debug.Log(r.Result.Item.NumberOfPlayer); // integer 参加人数
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ballotBody,   //  投票用紙の署名対象のデータ
    ballotSignature,   //  投票用紙の署名
    gameResults   //  投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト(オプション値)
);
return client.matchmaking.vote(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncVoteResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRatingName(); // string レーティング計算に使用するレーティング名
            // r.getResult()->getItem().getGatheringName(); // string 投票対象のギャザリング名
            // r.getResult()->getItem().getNumberOfPlayer(); // integer 参加人数
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    ballotBody,   //  投票用紙の署名対象のデータ
    ballotSignature,   //  投票用紙の署名
    gameResults   //  投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト(オプション値)
);

対戦結果を投票します。

投票は最初の投票が行われてから5分以内に行う必要があります。 つまり、結果は即座に反映されず、投票開始からおよそ5分後または全てのプレイヤーが投票を行った際に結果が反映されます。 5分以内に全ての投票用紙を回収できなかった場合はその時点の投票内容で多数決をとって結果を決定します。 各結果の投票数が同一だった場合は結果は捨てられます(スクリプトで挙動を変更可)。

結果を即座に反映したい場合は、勝利した側の代表プレイヤーが投票用紙を各プレイヤーから集めて voteMultiple を呼び出すことで結果を即座に反映できます。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
ballotBody string true 投票用紙の署名対象のデータ
ballotSignature string true 投票用紙の署名
gameResults list[GameResult] false 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト
パラメータ データ型 説明
item EzBallot 投票用紙

voteMultiple

yield return gs2.Matchmaking.VoteMultiple(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.UserId); // string ユーザーID
            Debug.Log(r.Result.Item.RatingName); // string レーティング計算に使用するレーティング名
            Debug.Log(r.Result.Item.GatheringName); // string 投票対象のギャザリング名
            Debug.Log(r.Result.Item.NumberOfPlayer); // integer 参加人数
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    signedBallots,   //  署名付の投票用紙リスト
    gameResults   //  投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト(オプション値)
);
return client.matchmaking.voteMultiple(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncVoteMultipleResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string ユーザーID
            // r.getResult()->getItem().getRatingName(); // string レーティング計算に使用するレーティング名
            // r.getResult()->getItem().getGatheringName(); // string 投票対象のギャザリング名
            // r.getResult()->getItem().getNumberOfPlayer(); // integer 参加人数
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    signedBallots,   //  署名付の投票用紙リスト
    gameResults   //  投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト(オプション値)
);

対戦結果をまとめて投票します。

ゲームに勝利した側が他プレイヤーの投票用紙を集めてまとめて投票するのに使用します。 『勝利した側』としているのは、敗北した側が自分たちが勝ったことにして報告することにインセンティブはありますが、その逆はないためです。 負けた側が投票用紙を渡してこない可能性がありますが、その場合も過半数の投票用紙があれば結果を通すことができます。

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
signedBallots list[SignedBallot] true 署名付の投票用紙リスト
gameResults list[GameResult] false 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト
パラメータ データ型 説明
item EzBallot 投票用紙

GS2-Mission

ミッション機能を提供するサービスです。

ミッション機能は「n回 クエストをクリアする」「n体のキャラクターを入手する」のような条件を設定し、達成することで報酬が得られる仕組みです。 これを実現するために ”ミッションの条件設定” ”カウンターの購読” ”カウンターの上昇” という仕組みを使います。

ミッションの条件設定とは、ミッションが達成されたことになるカウンターの閾値を設定するものです。

カウンターの購読とは、ミッションの対象となるカウンターの設定です。 1つのカウンターは複数のミッションから購読することができ、ミッションごとに異なるリセットタイミングを設定できます。 たとえば、「クエストを通算1000回クリアした」というミッションと、「クエストを今日10回クリアした」というデイリーミッションを作りたい場合、 クエストをクリアするごとにカウントアップされる1つのカウンターを両方のミッションから購読し、前者には 'リセットなし' 、後者には '毎日' のリセットタイミングを設定することで、1回のカウンター操作で複数の条件のミッションを処理することができます。

カウンターの上昇 は文字通りカウンターを上昇させる操作で、例えばクエストをクリアしたときにクエストのクリア回数のカウンター上昇を報酬に含めて使用します。

ミッションには2つの期間を設定できます。 1つ目はカウンターを操作できる期間で、カウンターを上昇させるのをイベント開催期間に限定するようなケースで使用します。 2つ目はミッション達成報酬の受け取り可能期間で、イベントが終わった後もしばらくミッションの報酬だけは受け取れるようにしたい場合は2つの期間を別に設定して使用します。 期間の指定には GS2-Schedule のイベントを関連付けます。

カウンター

カウンター

リセットタイミングごとのカウンターの値を保持します。

EzCounter

パラメータ データ型 必須 説明
name string false カウンター名
values list[ScopedValue] true

listCounters

yield return gs2.Mission.ListCounters(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Counter] カウンターのリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.mission.listCounters(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCountersResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Counter] カウンターのリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

達成したミッションの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Counter] カウンターのリスト
nextPageToken string リストの続きを取得するためのページトークン

getCounter

yield return gs2.Mission.GetCounter(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string カウンター名
            Debug.Log(r.Result.Item.Values); // list[ScopedValue] 値
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    counterName   //  カウンター名(オプション値)
);
return client.mission.getCounter(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCounterResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string カウンター名
            // r.getResult()->getItem().getValues(); // list[ScopedValue] 値
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    counterName   //  カウンター名(オプション値)
);

ミッショングループを指定して達成したミッションを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
counterName string false カウンター名
パラメータ データ型 説明
item EzCounter カウンター

ミッショングループ

ミッショングループ

デイリーミッション・ウィークリーミッション、イベントミッションなど、ミッションをグループ分けするのに使用します。

EzMissionGroupModel

パラメータ データ型 必須 説明
name string true グループ名
metadata string false メタデータ
tasks list[MissionTaskModel] false タスクリスト
resetType string true リセットタイミング
resetDayOfMonth integer true リセットをする日にち
resetDayOfWeek string true リセットする曜日
resetHour integer true リセット時刻
completeNotificationNamespaceId string false ミッションを達成したときの通知先ネームスペース のGRN

listMissionGroupModels

yield return gs2.Mission.ListMissionGroupModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[MissionGroupModel] ミッショングループのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.mission.listMissionGroupModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMissionGroupModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[MissionGroupModel] ミッショングループのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

ミッショングループモデルの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[MissionGroupModel] ミッショングループのリスト

getMissionGroupModel

yield return gs2.Mission.GetMissionGroupModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string グループ名
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.Tasks); // list[MissionTaskModel] タスクリスト
            Debug.Log(r.Result.Item.ResetType); // string リセットタイミング
            Debug.Log(r.Result.Item.ResetDayOfMonth); // integer リセットをする日にち
            Debug.Log(r.Result.Item.ResetDayOfWeek); // string リセットする曜日
            Debug.Log(r.Result.Item.ResetHour); // integer リセット時刻
            Debug.Log(r.Result.Item.CompleteNotificationNamespaceId); // string ミッションを達成したときの通知先ネームスペース のGRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  グループ名
);
return client.mission.getMissionGroupModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetMissionGroupModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string グループ名
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getTasks(); // list[MissionTaskModel] タスクリスト
            // r.getResult()->getItem().getResetType(); // string リセットタイミング
            // r.getResult()->getItem().getResetDayOfMonth(); // integer リセットをする日にち
            // r.getResult()->getItem().getResetDayOfWeek(); // string リセットする曜日
            // r.getResult()->getItem().getResetHour(); // integer リセット時刻
            // r.getResult()->getItem().getCompleteNotificationNamespaceId(); // string ミッションを達成したときの通知先ネームスペース のGRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  グループ名
);

ミッショングループ名を指定してミッショングループモデルを取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
missionGroupName string true グループ名
パラメータ データ型 説明
item EzMissionGroupModel ミッショングループ

設定値

設定値

EzConfig

パラメータ データ型 必須 説明
key string false 名前
value string false

ミッションタスク

ミッションタスク

ミッションの内容を定義。達成条件や達成報酬を設定します。

EzMissionTaskModel

パラメータ データ型 必須 説明
name string true タスク名
metadata string false メタデータ
counterName string true カウンター名
targetValue long true 目標値
completeAcquireActions list[AcquireAction] false ミッション達成時の報酬
challengePeriodEventId string false 達成報酬の受け取り可能な期間を指定するイベントマスター のGRN
premiseMissionTaskName string false このタスクに挑戦するために達成しておく必要のあるタスクの名前

listMissionTaskModels

yield return gs2.Mission.ListMissionTaskModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[MissionTaskModel] ミッションタスクのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  グループ名
);
return client.mission.listMissionTaskModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMissionTaskModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[MissionTaskModel] ミッションタスクのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  グループ名
);

ミッションタスクモデルの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
missionGroupName string true グループ名
パラメータ データ型 説明
items list[MissionTaskModel] ミッションタスクのリスト

getMissionTaskModel

yield return gs2.Mission.GetMissionTaskModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string タスク名
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.CounterName); // string カウンター名
            Debug.Log(r.Result.Item.TargetValue); // long 目標値
            Debug.Log(r.Result.Item.CompleteAcquireActions); // list[AcquireAction] ミッション達成時の報酬
            Debug.Log(r.Result.Item.ChallengePeriodEventId); // string 達成報酬の受け取り可能な期間を指定するイベントマスター のGRN
            Debug.Log(r.Result.Item.PremiseMissionTaskName); // string このタスクに挑戦するために達成しておく必要のあるタスクの名前
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  グループ名
    missionTaskName,   //  タスク名
);
return client.mission.getMissionTaskModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetMissionTaskModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string タスク名
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getCounterName(); // string カウンター名
            // r.getResult()->getItem().getTargetValue(); // long 目標値
            // r.getResult()->getItem().getCompleteAcquireActions(); // list[AcquireAction] ミッション達成時の報酬
            // r.getResult()->getItem().getChallengePeriodEventId(); // string 達成報酬の受け取り可能な期間を指定するイベントマスター のGRN
            // r.getResult()->getItem().getPremiseMissionTaskName(); // string このタスクに挑戦するために達成しておく必要のあるタスクの名前
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  グループ名
    missionTaskName,   //  タスク名
);

ミッションタスク名を指定してミッションタスクモデルを取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
missionGroupName string true グループ名
missionTaskName string true タスク名
パラメータ データ型 説明
item EzMissionTaskModel ミッションタスク

達成状況

達成状況

ミッションの達成状況

EzComplete

パラメータ データ型 必須 説明
missionGroupName string true ミッショングループ名
completedMissionTaskNames list[string] true 達成済みのタスク名リスト
receivedMissionTaskNames list[string] true 報酬の受け取り済みのタスク名リスト

listCompletes

yield return gs2.Mission.ListCompletes(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[Complete] 達成状況のリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.mission.listCompletes(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCompletesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[Complete] 達成状況のリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

達成したミッションの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[Complete] 達成状況のリスト
nextPageToken string リストの続きを取得するためのページトークン

getComplete

yield return gs2.Mission.GetComplete(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.MissionGroupName); // string ミッショングループ名
            Debug.Log(r.Result.Item.CompletedMissionTaskNames); // list[string] 達成済みのタスク名リスト
            Debug.Log(r.Result.Item.ReceivedMissionTaskNames); // list[string] 報酬の受け取り済みのタスク名リスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  ミッショングループ名
);
return client.mission.getComplete(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCompleteResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getMissionGroupName(); // string ミッショングループ名
            // r.getResult()->getItem().getCompletedMissionTaskNames(); // list[string] 達成済みのタスク名リスト
            // r.getResult()->getItem().getReceivedMissionTaskNames(); // list[string] 報酬の受け取り済みのタスク名リスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  ミッショングループ名
);

ミッショングループを指定して達成したミッションを取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
missionGroupName string true ミッショングループ名
パラメータ データ型 説明
item EzComplete 達成状況

receiveRewards

yield return gs2.Mission.ReceiveRewards(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.StampSheet); // string ミッションの達成報酬を受領するスタンプシート
            Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  ミッショングループ名
    missionTaskName,   //  タスク名
);
return client.mission.receiveRewards(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncReceiveRewardsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getStampSheet(); // string ミッションの達成報酬を受領するスタンプシート
            // r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  ミッショングループ名
    missionTaskName,   //  タスク名
);

ミッションの達成報酬を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
missionGroupName string true ミッショングループ名
missionTaskName string true タスク名
パラメータ データ型 説明
stampSheet string ミッションの達成報酬を受領するスタンプシート
stampSheetEncryptionKeyId string スタンプシートの署名計算に使用した暗号鍵GRN

入手アクション

入手アクション

EzAcquireAction

パラメータ データ型 必須 説明
action string true スタンプシートで実行するアクションの種類
request string true 入手リクエストのJSON

カウンターのリセットタイミング

カウンターのリセットタイミング

EzCounterScopeModel

パラメータ データ型 必須 説明
resetType string true リセットタイミング
resetDayOfMonth integer true リセットをする日にち
resetDayOfWeek string true リセットする曜日
resetHour integer true リセット時刻

カウンターの種類

カウンターの種類

EzCounterModel

パラメータ データ型 必須 説明
name string true カウンター名
metadata string false メタデータ
scopes list[CounterScopeModel] true カウンターのリセットタイミング
challengePeriodEventId string false カウントアップ可能な期間を指定するイベントマスター のGRN

listCounterModels

yield return gs2.Mission.ListCounterModels(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[CounterModel] カウンターの種類のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);
return client.mission.listCounterModels(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCounterModelsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[CounterModel] カウンターの種類のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
);

カウンターの種類を認証

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[CounterModel] カウンターの種類のリスト

getCounterModel

yield return gs2.Mission.GetCounterModel(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name); // string カウンター名
            Debug.Log(r.Result.Item.Metadata); // string メタデータ
            Debug.Log(r.Result.Item.Scopes); // list[CounterScopeModel] カウンターのリセットタイミング
            Debug.Log(r.Result.Item.ChallengePeriodEventId); // string カウントアップ可能な期間を指定するイベントマスター のGRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    counterName,   //  カウンター名
);
return client.mission.getCounterModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCounterModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string カウンター名
            // r.getResult()->getItem().getMetadata(); // string メタデータ
            // r.getResult()->getItem().getScopes(); // list[CounterScopeModel] カウンターのリセットタイミング
            // r.getResult()->getItem().getChallengePeriodEventId(); // string カウントアップ可能な期間を指定するイベントマスター のGRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    counterName,   //  カウンター名
);

カウンターの種類を認証

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
counterName string true カウンター名
パラメータ データ型 説明
item EzCounterModel カウンターの種類

リセットタイミングまでの期間のカウンター値

リセットタイミングまでの期間のカウンター値

EzScopedValue

パラメータ データ型 必須 説明
resetType string true リセットタイミング
value long true カウント

GS2-Money

課金通貨を管理するサービスです。

課金通貨とは、日本の資金決済法に定義された、前払式支払手段 (自家型) に該当するゲーム内通貨を指します。 資金決済法に準拠するために、GS2-Money では、残高や通貨のトランザクションの管理を行います。

異なるプラットフォーム間でウォレットを共有したくない場合、アクセス元のプラットフォームによって同一アカウント内のウォレットを分ける仕組みも提供します。 その場合でも、無償提供分は、異なるプラットフォーム間で共有することができます。

ウォレット

ウォレット

スロットごとに有償課金通貨と無償課金通貨の数量を保持します。

EzWallet

パラメータ データ型 必須 説明
slot integer true スロット番号
paid integer true 有償課金通貨所持量
free integer true 無償課金通貨所持量
updatedAt long true 最終更新日時

get

yield return gs2.Money.Get(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Slot); // integer スロット番号
            Debug.Log(r.Result.Item.Paid); // integer 有償課金通貨所持量
            Debug.Log(r.Result.Item.Free); // integer 無償課金通貨所持量
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
    slot,   //  スロット番号
);
return client.money.get(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getSlot(); // integer スロット番号
            // r.getResult()->getItem().getPaid(); // integer 有償課金通貨所持量
            // r.getResult()->getItem().getFree(); // integer 無償課金通貨所持量
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
    slot,   //  スロット番号
);

ウォレットを取得します

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペースの名前
slot integer true スロット番号
パラメータ データ型 説明
item EzWallet ウォレット

withdraw

yield return gs2.Money.Withdraw(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Slot); // integer スロット番号
            Debug.Log(r.Result.Item.Paid); // integer 有償課金通貨所持量
            Debug.Log(r.Result.Item.Free); // integer 無償課金通貨所持量
            Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
            Debug.Log(r.Result.Price); // float 消費した通貨の価格
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
    slot,   //  スロット番号
    count,   //  消費する課金通貨の数量
    paidOnly,   //  有償課金通貨のみを対象とするか
);
return client.money.withdraw(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncWithdrawResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getSlot(); // integer スロット番号
            // r.getResult()->getItem().getPaid(); // integer 有償課金通貨所持量
            // r.getResult()->getItem().getFree(); // integer 無償課金通貨所持量
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
            // r.getResult()->getPrice(); // float 消費した通貨の価格
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
    slot,   //  スロット番号
    count,   //  消費する課金通貨の数量
    paidOnly,   //  有償課金通貨のみを対象とするか
);

ウォレットから残高を消費します

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペースの名前
slot integer true スロット番号
count integer true 消費する課金通貨の数量
paidOnly boolean true 有償課金通貨のみを対象とするか
パラメータ データ型 説明
item EzWallet 消費後のウォレット
price float 消費した通貨の価格

GS2-News

お知らせ機能を実現するサービスです。

お知らせで配信する記事データは Hugo(https://gohugo.io/) で作成されている必要があります。 GS2-News に Hugo のサイトデータ一式を zip で圧縮したデータをアップロードするか、GitHub のリポジトリを指定して反映します。 サイトデータは全体で100MB以内に収める必要があります。

GS2-News は受け取ったサイトデータから /content/{sectionName}/{contentName}/index.html を走査します。 index.* の Front Matter を解析し、公開期間などの情報を抽出します。そのため、サイトデータのツリー構造はこの形式に従っている必要があり、 コンテンツの上部に記述する Front Matter は必ず yaml 形式で記述する必要があります。

Front Matter にはいくつかのGS2に向けた制御構文を記述することができます。 詳細は後述しますが、コンテンツの公開条件を Front Matter の制御構文で定義した場合、GS2-News は公開条件を満たさないコンテンツを削除してサイトをビルドします。 GS2-News は公開条件が設定されたコンテンツの公開・非公開状態のすべてのパターンを事前にビルドし、Webサーバに配置します。 そのため、公開条件が設定されたコンテンツが多数ある場合、組み合わせ爆発が発生し更新にかかる時間や費用が増大します。 公開条件が設定されたコンテンツが最小になるように工夫をしてください。

ビルドが行われるパターン数はサイトデータのアップロード時の戻り値で確認することができます。

クライアントが自身にとって現在有効なサイトデータを取得する方法として複数の方法が提供されます。

サイトのビルドには 『-D, --buildDrafts』 オプションは指定しません。 たとえ、サイトデータ内にコンテンツがあったとしても Front Matter で draft として宣言されたコンテンツは配信されません。

Front Matter に記述可能な制御構文

公開期間の設定

x_gs2_scheduleEventId: ${GS2-Schedule のイベントGRN}

と記述することで、そのコンテンツは該当イベントの開催期間にしか公開されなくなります。 イベントに連動したコンテンツの配信に利用できます。

また、GRNには {region}{ownerId} のプレースホルダを使用でき、それぞれ実行中のリージョン・オーナーIDに置換されます。

grn:gs2:{region}:{ownerId}:schedule:schedule-0001:event:event-0001

サンプル

https://github.com/gs2io/gs2-news-sample

お知らせ記事

お知らせ記事

EzNews

パラメータ データ型 必須 説明
section string true セクション名
content string true コンテンツ名
title string true 記事見出し
scheduleEventId string true 配信期間を決定する GS2-Schedule のイベントID
timestamp long true タイムスタンプ
frontMatter string true Front Matter

listNewses

yield return gs2.News.ListNewses(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[News] お知らせ記事のリスト
            Debug.Log(r.Result.ContentHash); // string お知らせ記事データのハッシュ値
            Debug.Log(r.Result.TemplateHash); // string テンプレートデータのハッシュ値
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
);
return client.news.listNewses(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListNewsesResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[News] お知らせ記事のリスト
            // r.getResult()->getContentHash(); // string お知らせ記事データのハッシュ値
            // r.getResult()->getTemplateHash(); // string テンプレートデータのハッシュ値
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
);

達成したミッションの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペースの名前
パラメータ データ型 説明
items list[News] お知らせ記事のリスト
contentHash string お知らせ記事データのハッシュ値
templateHash string テンプレートデータのハッシュ値

getContentsUrl

yield return gs2.News.GetContentsUrl(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[SetCookieRequestEntry] お知らせコンテンツにアクセスするために設定の必要なクッキー のリスト
            Debug.Log(r.Result.BrowserUrl); // string お知らせコンテンツにアクセスするためのURL
            Debug.Log(r.Result.ZipUrl); // string ZIP形式のお知らせコンテンツにアクセスするためのURL Cookieの設定は不要
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
);
return client.news.getContentsUrl(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetContentsUrlResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[SetCookieRequestEntry] お知らせコンテンツにアクセスするために設定の必要なクッキー のリスト
            // r.getResult()->getBrowserUrl(); // string お知らせコンテンツにアクセスするためのURL
            // r.getResult()->getZipUrl(); // string ZIP形式のお知らせコンテンツにアクセスするためのURL Cookieの設定は不要
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペースの名前
);

達成したミッションの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペースの名前
パラメータ データ型 説明
items list[SetCookieRequestEntry] お知らせコンテンツにアクセスするために設定の必要なクッキー のリスト
browserUrl string お知らせコンテンツにアクセスするためのURL
zipUrl string ZIP形式のお知らせコンテンツにアクセスするためのURL Cookieの設定は不要

ニュース記事

ニュース記事

EzSetCookieRequestEntry

パラメータ データ型 必須 説明
key string true 記事を閲覧できるようにするために設定してほしい Cookie のキー値
value string true 記事を閲覧できるようにするために設定してほしい Cookie の値

GS2-Quest

クエストの進捗管理をします。

クエストには開始するために必要な対価、クエストに成功したときの報酬、クエストに失敗したときの報酬 を設定できます。

クエストを開始するために必要な対価にはスタミナを消費する処理や、回数制限のカウンター上昇などを設定します。

クエストに成功したときの報酬は複数設定でき、クエスト開始時に抽選する際に使用する確率を設定できます。 これを使用することで、クエストとしては同じだが、通常コンテンツとレアエネミーが出現するコンテンツを出し分けることができます。 クエスト成功時の報酬には、キャラクターの経験値やアイテム、ゲーム内通貨などを設定します。

クエストに失敗したときの報酬とは、クエストに失敗したときに開始時に受け取った対価を返却する場合などに設定します。

コンテンツ

コンテンツ

EzContents

パラメータ データ型 必須 説明
metadata string false クエストモデルのメタデータ
completeAcquireActions list[AcquireAction] false クエストクリア時の報酬

消費アクション

消費アクション

EzConsumeAction

パラメータ データ型 必須 説明
action string true スタンプタスクで実行するアクションの種類
request string true 消費リクエストのJSON

入手アクション

入手アクション

EzAcquireAction

パラメータ データ型 必須 説明
action string true スタンプシートで実行するアクションの種類
request string true 入手リクエストのJSON

クリア報酬

クリア報酬

EzReward

パラメータ データ型 必須 説明
action string true スタンプシートで実行するアクションの種類
request string true リクエストモデル
itemId string true 入手するリソースGRN
value integer true 入手する数量

設定値

設定値

EzConfig

パラメータ データ型 必須 説明
key string false 名前
value string false

クエスト挑戦

クエスト挑戦

挑戦中のクエストを管理するモデル。

EzProgress

パラメータ データ型 必須 説明
progressId string true クエスト挑戦
transactionId string true トランザクションID
questModelId string true クエストモデル
randomSeed long true 乱数シード
rewards list[Reward] true クエストで得られる報酬の上限

start

yield return gs2.Quest.Start(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.StampSheet); // string クエストの開始処理の実行に使用するスタンプシート
            Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    questGroupName,   //  クエストグループ名
    questName,   //  クエストモデル名
    force,   //  すでに開始しているクエストがある場合にそれを破棄して開始するか(オプション値)
    config   //  スタンプシートの変数に適用する設定値(オプション値)
);
return client.quest.start(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncStartResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getStampSheet(); // string クエストの開始処理の実行に使用するスタンプシート
            // r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    questGroupName,   //  クエストグループ名
    questName,   //  クエストモデル名
    force,   //  すでに開始しているクエストがある場合にそれを破棄して開始するか(オプション値)
    config   //  スタンプシートの変数に適用する設定値(オプション値)
);

クエストの開始を宣言

すでに同一ゲームプレイヤーで開始済みのクエストがある場合は失敗します。 それでも強制的に開始したい場合は force オプションに true を指定してください。

クエストの開始が完了すると、そのクエストで得られる最大報酬に関する情報が応答されます。 その内容をクエスト内の演出で排出してください。 その際に、応答に含まれる乱数シードを使用してゲームプレイに再現性があるように設計しておくと、アプリで乱数起因の不具合が発生したときに調査しやすくなります。

進行中のクエストを一意に特定するためのIDとして クエストトランザクションID が応答されます。 クエストの完了を報告する際には クエストトランザクションID を指定することで、どのクエストに対する完了報告かを識別します。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリ名
questGroupName string true クエストグループ名
questName string true クエストモデル名
force boolean false すでに開始しているクエストがある場合にそれを破棄して開始するか
config list[Config] false スタンプシートの変数に適用する設定値
パラメータ データ型 説明
stampSheet string クエストの開始処理の実行に使用するスタンプシート
stampSheetEncryptionKeyId string スタンプシートの署名計算に使用した暗号鍵GRN

end

yield return gs2.Quest.End(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.ProgressId); // string クエスト挑戦
            Debug.Log(r.Result.Item.TransactionId); // string トランザクションID
            Debug.Log(r.Result.Item.QuestModelId); // string クエストモデル
            Debug.Log(r.Result.Item.RandomSeed); // long 乱数シード
            Debug.Log(r.Result.Item.Rewards); // list[Reward] クエストで得られる報酬の上限
            Debug.Log(r.Result.StampSheet); // string 報酬付与処理の実行に使用するスタンプシート
            Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    transactionId,   //  トランザクションID
    rewards,   //  実際にクエストで得た報酬(オプション値)
    isComplete,   //  クエストをクリアしたか(オプション値)
    config   //  スタンプシートの変数に適用する設定値(オプション値)
);
return client.quest.end(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncEndResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getProgressId(); // string クエスト挑戦
            // r.getResult()->getItem().getTransactionId(); // string トランザクションID
            // r.getResult()->getItem().getQuestModelId(); // string クエストモデル
            // r.getResult()->getItem().getRandomSeed(); // long 乱数シード
            // r.getResult()->getItem().getRewards(); // list[Reward] クエストで得られる報酬の上限
            // r.getResult()->getStampSheet(); // string 報酬付与処理の実行に使用するスタンプシート
            // r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    transactionId,   //  トランザクションID
    rewards,   //  実際にクエストで得た報酬(オプション値)
    isComplete,   //  クエストをクリアしたか(オプション値)
    config   //  スタンプシートの変数に適用する設定値(オプション値)
);

クエストの完了を報告

クエストが完了したことを報告します。その際に isComplete にクエストに成功したか、失敗したかを渡します。 クエストに成功した場合は rewards にクエスト内で入手した報酬を報告する必要があります。

rewards で報告された内容は評価され、開始時に渡した数量以上や入手できないリソースを入手したと報告してきた場合はエラーとなります。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリ名
rewards list[Reward] false 実際にクエストで得た報酬
transactionId string true トランザクションID
isComplete boolean false クエストをクリアしたか
config list[Config] false スタンプシートの変数に適用する設定値
パラメータ データ型 説明
item EzProgress クエスト挑戦
stampSheet string 報酬付与処理の実行に使用するスタンプシート
stampSheetEncryptionKeyId string スタンプシートの署名計算に使用した暗号鍵GRN

getProgress

yield return gs2.Quest.GetProgress(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.ProgressId); // string クエスト挑戦
            Debug.Log(r.Result.Item.TransactionId); // string トランザクションID
            Debug.Log(r.Result.Item.QuestModelId); // string クエストモデル
            Debug.Log(r.Result.Item.RandomSeed); // long 乱数シード
            Debug.Log(r.Result.Item.Rewards); // list[Reward] クエストで得られる報酬の上限
            Debug.Log(r.Result.QuestGroup.Name); // string クエストグループ名
            Debug.Log(r.Result.QuestGroup.Metadata); // string クエストグループのメタデータ
            Debug.Log(r.Result.QuestGroup.Quests); // list[QuestModel] グループに属するクエスト
            Debug.Log(r.Result.QuestGroup.ChallengePeriodEventId); // string 挑戦可能な期間を指定するイベントマスター のGRN
            Debug.Log(r.Result.Quest.QuestModelId); // string クエストモデル
            Debug.Log(r.Result.Quest.Name); // string クエストモデル名
            Debug.Log(r.Result.Quest.Metadata); // string クエストモデルのメタデータ
            Debug.Log(r.Result.Quest.Contents); // list[Contents] クエストの内容
            Debug.Log(r.Result.Quest.ChallengePeriodEventId); // string 挑戦可能な期間を指定するイベントマスター のGRN
            Debug.Log(r.Result.Quest.ConsumeActions); // list[ConsumeAction] クエストの参加料
            Debug.Log(r.Result.Quest.FailedAcquireActions); // list[AcquireAction] クエスト失敗時の報酬
            Debug.Log(r.Result.Quest.PremiseQuestNames); // list[string] クエストに挑戦するためにクリアしておく必要のあるクエスト名
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
);
return client.quest.getProgress(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetProgressResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getProgressId(); // string クエスト挑戦
            // r.getResult()->getItem().getTransactionId(); // string トランザクションID
            // r.getResult()->getItem().getQuestModelId(); // string クエストモデル
            // r.getResult()->getItem().getRandomSeed(); // long 乱数シード
            // r.getResult()->getItem().getRewards(); // list[Reward] クエストで得られる報酬の上限
            // r.getResult()->getQuestGroup().getName(); // string クエストグループ名
            // r.getResult()->getQuestGroup().getMetadata(); // string クエストグループのメタデータ
            // r.getResult()->getQuestGroup().getQuests(); // list[QuestModel] グループに属するクエスト
            // r.getResult()->getQuestGroup().getChallengePeriodEventId(); // string 挑戦可能な期間を指定するイベントマスター のGRN
            // r.getResult()->getQuest().getQuestModelId(); // string クエストモデル
            // r.getResult()->getQuest().getName(); // string クエストモデル名
            // r.getResult()->getQuest().getMetadata(); // string クエストモデルのメタデータ
            // r.getResult()->getQuest().getContents(); // list[Contents] クエストの内容
            // r.getResult()->getQuest().getChallengePeriodEventId(); // string 挑戦可能な期間を指定するイベントマスター のGRN
            // r.getResult()->getQuest().getConsumeActions(); // list[ConsumeAction] クエストの参加料
            // r.getResult()->getQuest().getFailedAcquireActions(); // list[AcquireAction] クエスト失敗時の報酬
            // r.getResult()->getQuest().getPremiseQuestNames(); // list[string] クエストに挑戦するためにクリアしておく必要のあるクエスト名
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
);

クエストの進行情報を取得。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリ名
パラメータ データ型 説明
item EzProgress クエスト挑戦
questGroup EzQuestGroupModel クエストグループ
quest EzQuestModel クエストモデル

deleteProgress

yield return gs2.Quest.DeleteProgress(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.ProgressId); // string クエスト挑戦
            Debug.Log(r.Result.Item.TransactionId); // string トランザクションID
            Debug.Log(r.Result.Item.QuestModelId); // string クエストモデル
            Debug.Log(r.Result.Item.RandomSeed); // long 乱数シード
            Debug.Log(r.Result.Item.Rewards); // list[Reward] クエストで得られる報酬の上限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
);
return client.quest.deleteProgress(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteProgressResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getProgressId(); // string クエスト挑戦
            // r.getResult()->getItem().getTransactionId(); // string トランザクションID
            // r.getResult()->getItem().getQuestModelId(); // string クエストモデル
            // r.getResult()->getItem().getRandomSeed(); // long 乱数シード
            // r.getResult()->getItem().getRewards(); // list[Reward] クエストで得られる報酬の上限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
);

クエストの進行情報を削除。

クエストの開始時に force オプションを使うのではなく、明示的に進行情報を削除したい場合に使用してください。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリ名
パラメータ データ型 説明
item EzProgress クエスト挑戦

クエスト進行

クエスト進行

プレイヤーごとにクリア済みのクエストのリストを保持します。

EzCompletedQuestList

パラメータ データ型 必須 説明
questGroupName string false クエストグループ名
completeQuestNames list[string] true 攻略済みのクエスト名一覧のリスト

describeCompletedQuestLists

yield return gs2.Quest.DescribeCompletedQuestLists(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[CompletedQuestList] クエスト進行のリスト
            Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);
return client.quest.describeCompletedQuestLists(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeCompletedQuestListsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[CompletedQuestList] クエスト進行のリスト
            // r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    pageToken,   //  データの取得を開始する位置を指定するトークン(オプション値)
    limit   //  データの取得件数(オプション値)
);

クエスト進行情報の一覧を取得

クエストグループごとに1つの クエスト進行情報 として登録されており、 クエスト進行情報 にはクエストグループ内でクリア済みのクエスト名の一覧が記録されています。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリ名
pageToken string false データの取得を開始する位置を指定するトークン
limit long false データの取得件数
パラメータ データ型 説明
items list[CompletedQuestList] クエスト進行のリスト
nextPageToken string リストの続きを取得するためのページトークン

getCompletedQuestList

yield return gs2.Quest.GetCompletedQuestList(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.QuestGroupName); // string クエストグループ名
            Debug.Log(r.Result.Item.CompleteQuestNames); // list[string] 攻略済みのクエスト名一覧のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    questGroupName,   //  クエストグループモデル名
);
return client.quest.getCompletedQuestList(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCompletedQuestListResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getQuestGroupName(); // string クエストグループ名
            // r.getResult()->getItem().getCompleteQuestNames(); // list[string] 攻略済みのクエスト名一覧のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    questGroupName,   //  クエストグループモデル名
);

クエスト進行情報を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリ名
questGroupName string true クエストグループモデル名
パラメータ データ型 説明
item EzCompletedQuestList クエスト進行

クエストグループ

クエストグループ

クエストを一定数で束ねる単位です。クリア済みのクエストリストなどはこのグループ単位でまとめて取得できます。 1つのクエストグループには最大1000個のクエストを設定できます。

EzQuestGroupModel

パラメータ データ型 必須 説明
name string true クエストグループ名
metadata string false クエストグループのメタデータ
quests list[QuestModel] false グループに属するクエスト
challengePeriodEventId string false 挑戦可能な期間を指定するイベントマスター のGRN

listQuestGroups

yield return gs2.Quest.ListQuestGroups(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Items); // list[QuestGroupModel] クエストグループのリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
);
return client.quest.listQuestGroups(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListQuestGroupsResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItems(); // list[QuestGroupModel] クエストグループのリスト
        }
    },
    gameSession