NAV Navbar
Unity UE4/Cocos2d-x
 

GS2-SDK for GameEngine

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

現在提供中のゲームエンジン向け SDK は Unity のみの提供となりますが、近日中に Unreal Engine 4 と cocos-2dx の SDK を提供開始します。

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 を使用しなければ削除することが出来ます。

ダウンロード

GS2 SDK for Unity Version 2019.11.2

導入手順

Unity Editor を起動し、メニューの Import Package から .unitypackage ファイルをインポートします。

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 2019.11.1

導入手順

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(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 2019.11.1

導入手順

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 の loginBySignature にわたすことで、GS2の各サービスにアクセスするための アクセストークン を得ることができます。

アカウント認証情報署名 は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内の各サービスでゲームプレイヤーを識別するために使用されます。

パラメータ データ型 必須 説明
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 true ルーム名
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,   //  ネームスペース名
    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,   //  ネームスペース名
    metadata,   //  メタデータ(オプション値)
    password,   //  メッセージを投稿するために必要となるパスワード(オプション値)
    whiteListUserIds,   //  ルームに参加可能なユーザIDリスト(オプション値)
)

ルームの作成

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

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
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,   //  データの取得件数(オプション値)
)
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,   //  データの取得件数(オプション値)
)

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

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

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

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

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
roomName string true ルーム名
startAt long false メッセージの取得を開始する時間
limit long 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リスト
)
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リスト
)

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

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

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-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 交換処理の実行に使用するスタンプシート
        }
    },
    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 交換処理の実行に使用するスタンプシート
        }
    },
    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 交換処理の実行に使用するスタンプシート

設定値

設定値

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 で編成に使用されていないかの判定はクライアントまたはスクリプトで実装する必要があります。

フォームモデル

フォームモデル

EzFormModel

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

フォームの保存領域

フォームの保存領域

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 フォームモデル

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

スロットモデル

スロットモデル

EzSlotModel

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

署名付きスロット

署名付きスロット

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

EzSlotWithSignature

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

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

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

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 拒否したフレンドリクエスト

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

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

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 を利用してバッチ処理でメッセージを送信することができます。 メンテナンスのお詫びなどの全ゲームプレイヤーに一斉送信する通知は、将来提供されるニュース機能で実現される予定ですが、この受信をトリガーにメッセージを送信することも可能になる予定です。

メッセージ

メッセージ

プレゼントボックスに届いたメッセージデータ。 メッセージの保存期間は最長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 最終更新日時

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 リストの続きを取得するためのページトークン

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.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()->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 有効期限ごとのアイテム所持数量
inventoryName string true インベントリの名前
itemName string true アイテムマスターの名前
count long 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,   //  アイテムモデルの種類名
)

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

このAPIはあなたの意図に反して複数のアイテムを返すかもしれません。

複数のアイテムが応答された場合はそれは同一アイテムでありながら、有効期限が異なるアイテムです。 逆に言えば、有効期限さえ設定しなければこのAPIは常に1つのアイテムを応答します。

パラメータ データ型 必須 説明
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
)
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
)

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

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

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true カテゴリー名
inventoryName string true インベントリの種類名
itemName string true アイテムモデルの種類名
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,   //  消費する量
)
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,   //  消費する量
)

アイテムを消費

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

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

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

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

GS2-JobQueue

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

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

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

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

ジョブ

ジョブ

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

EzJob

パラメータ データ型 必須 説明
jobId 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.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().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

ジョブの実行結果

ジョブの実行結果

ジョブとして実行した 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,   //  回数制限の種類の名前(オプション値)
)
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,   //  回数制限の種類の名前(オプション値)
)

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

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

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
limitName string 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 カウンター

回数制限の種類

回数制限の種類

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

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,   //  ネームスペース名
    lotteryName,   //  抽選モデルの種類名
)
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,   //  ネームスペース名
    lotteryName,   //  抽選モデルの種類名
)

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

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

resetBox

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

ボックスのリセット

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
lotteryName 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 に指定することで、同じレベル帯のプレイヤー同士がマッチメイキングされます。

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

最初は狭い範囲で募集し、なるべく同じレベルのプレイヤー同士でマッチメイキングするが、なかなか対戦相手が見つからない場合、募集するレベル帯を広げて募集したいとします。 ギャザリングを作成しておよそ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 メタデータ
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.CreatedAt) // long 作成日時
            Debug.Log(r.Result.Item.UpdatedAt) // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    player,   //  自身のプレイヤー情報
    capacityOfRoles,   //  参加者
    allowUserIds,   //  参加を許可するユーザIDリスト
    attributeRanges,   //  募集条件(オプション値)
)
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().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    player,   //  自身のプレイヤー情報
    capacityOfRoles,   //  参加者
    allowUserIds,   //  参加を許可するユーザIDリスト
    attributeRanges,   //  募集条件(オプション値)
)

ギャザリングを新規作成

Player に指定する自身のプレイヤー情報のユーザIDは省略できます。

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
player Player true 自身のプレイヤー情報
attributeRanges list[AttributeRange] false 募集条件
capacityOfRoles list[CapacityOfRole] true 参加者
allowUserIds list[string] true 参加を許可するユーザIDリスト
パラメータ データ型 説明
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.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().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.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().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.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().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.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().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    gatheringName,   //  ギャザリング名
)

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

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

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

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

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

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 ロール名

GS2-Mission

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

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

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

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

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

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

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

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

EzCounterScopeModel

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

ミッショングループ

ミッショングループ

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

EzMissionGroupModel

パラメータ データ型 必須 説明
name string true グループ名
metadata string false メタデータ
tasks list[MissionTaskModel] false タスクリスト
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.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().getCompleteNotificationNamespaceId(); // string ミッションを達成したときの通知先ネームスペース のGRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  グループ名
)

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

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

達成状況

達成状況

ミッションの達成状況

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 ミッションの達成報酬を受領するスタンプシート
        }
    },
    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 ミッションの達成報酬を受領するスタンプシート
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    missionGroupName,   //  ミッショングループ名
    missionTaskName,   //  タスク名
)

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

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

カウンターの種類

カウンターの種類

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 カウンターの種類

設定値

設定値

EzConfig

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

ミッションタスク

ミッションタスク

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

EzMissionTaskModel

パラメータ データ型 必須 説明
name string true タスク名
metadata string false メタデータ
counterName string true カウンター名
resetType 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.ResetType) // 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().getResetType(); // 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 ミッションタスク

入手アクション

入手アクション

EzAcquireAction

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

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 クエストの開始処理の実行に使用するスタンプシート
        }
    },
    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 クエストの開始処理の実行に使用するスタンプシート
        }
    },
    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 クエストの開始処理の実行に使用するスタンプシート

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 報酬付与処理の実行に使用するスタンプシート
        }
    },
    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 報酬付与処理の実行に使用するスタンプシート
        }
    },
    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 報酬付与処理の実行に使用するスタンプシート

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,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
)

クエストグループの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true カテゴリ名
パラメータ データ型 説明
items list[QuestGroupModel] クエストグループのリスト

getQuestGroup

yield return gs2.Quest.GetQuestGroup(
    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.Quests) // list[QuestModel] グループに属するクエスト
            Debug.Log(r.Result.Item.ChallengePeriodEventId) // string 挑戦可能な期間を指定するイベントマスター のGRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    questGroupName,   //  クエストグループモデル名
)
return client.quest.getQuestGroup(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetQuestGroupResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string クエストグループ名
            // r.getResult()->getItem().getMetadata(); // string クエストグループのメタデータ
            // r.getResult()->getItem().getQuests(); // list[QuestModel] グループに属するクエスト
            // r.getResult()->getItem().getChallengePeriodEventId(); // string 挑戦可能な期間を指定するイベントマスター のGRN
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  カテゴリ名
    questGroupName,   //  クエストグループモデル名
)

クエストグループの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true カテゴリ名
questGroupName string true クエストグループモデル名
パラメータ データ型 説明
item EzQuestGroupModel クエストグループ

None

None

EzQuestModel

パラメータ データ型 必須 説明
questModelId string true クエストモデル
name string true クエストモデル名
metadata string false クエストモデルのメタデータ
contents list[Contents] true クエストの内容
challengePeriodEventId string false 挑戦可能な期間を指定するイベントマスター のGRN
consumeActions list[ConsumeAction] false クエストの参加料
failedAcquireActions list[AcquireAction] false クエスト失敗時の報酬
premiseQuestNames list[string] false クエストに挑戦するためにクリアしておく必要のあるクエスト名

listQuests

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

クエストモデルの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true カテゴリ名
questGroupName string true クエストグループモデル名
パラメータ データ型 説明
items list[QuestModel] Noneのリスト

getQuest

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

クエストモデルの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true カテゴリ名
questGroupName string true クエストグループモデル名
questName string true クエスト名
パラメータ データ型 説明
item EzQuestModel

GS2-Ranking

スコアやクリアタイムのランキング処理を実現します。

ランキングには全員が同じデータを参照するグローバルランキングと、 フレンド間やギルド内のランキングのようなユーザによって見えるランキングの内容の異なるスコープドランキングがあります。

グローバルランキングは、15分~24時間の間で指定した間隔でランキングの集計処理がおこなわれ、 ゲームユーザーからのリクエストは事前に集計された結果を応答します。 これによって、大量のゲームプレイヤーが居たとしてもレスポンスタイムは変わらないように設計されています。

スコープドランキングは各ゲームプレイヤーがスコアバケットをもち、購読しているゲームプレイヤーがスコアを登録するとスコアバケットにスコアが追加されます。 各ゲームプレイヤーは自分のスコアバケット内のスコアを使ってランキングを処理します。

グローバルランキング・スコープドランキング ともにユーザーID毎に保持できるスコアを1個にするか、複数保持できるかを設定できます。 ランキングを登録したときに最後に登録したスコアだけをランキング対象としたいか、登録したすべてのスコアをランキング対象としたいかで設定できます。 すべてのスコアをランキング対象とする場合、データ量が膨れ上がりやすくなります。その結果、GS2の利用料金にも影響を与えることとなります。 ゲームシステム上の大きな理由がなければ最後に登録された1つのスコアのみがランキング対象となるように設定することをお勧めします。

カテゴリ

カテゴリ

ランキングのゲームモードなどを指定します

EzCategoryModel

パラメータ データ型 必須 説明
name string true カテゴリ名
metadata string false カテゴリのメタデータ

listCategories

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

カテゴリの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[CategoryModel] カテゴリのリスト

getCategory

yield return gs2.Ranking.GetCategory(
    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,   //  ネームスペース名
    categoryName,   //  カテゴリモデル名
)
return client.ranking.getCategory(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCategoryResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string カテゴリ名
            // r.getResult()->getItem().getMetadata(); // string カテゴリのメタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    categoryName,   //  カテゴリモデル名
)

カテゴリの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
categoryName string true カテゴリモデル名
パラメータ データ型 説明
item EzCategoryModel カテゴリ

購読

購読

スコープランキングに反映してほしい他のプレイヤーを登録します。

listSubscribes

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

購読しているユーザIDの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
categoryName string true カテゴリ名
パラメータ データ型 説明
items list[SubscribeUser] 購読対象のリスト

subscribe

yield return gs2.Ranking.Subscribe(
    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,   //  ネームスペース名
    categoryName,   //  カテゴリ名
    targetUserId,   //  購読されるユーザID
)
return client.ranking.subscribe(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSubscribeResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string 購読するユーザID
            // r.getResult()->getItem().getTargetUserId(); // string 購読されるユーザID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    categoryName,   //  カテゴリ名
    targetUserId,   //  購読されるユーザID
)

ユーザIDを購読

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

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
categoryName string true カテゴリ名
targetUserId string true 購読されるユーザID
パラメータ データ型 説明
item EzSubscribeUser 購読した購読対象

unsubscribe

yield return gs2.Ranking.Unsubscribe(
    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,   //  ネームスペース名
    categoryName,   //  カテゴリ名
    targetUserId,   //  購読されるユーザID
)
return client.ranking.unsubscribe(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnsubscribeResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getUserId(); // string 購読するユーザID
            // r.getResult()->getItem().getTargetUserId(); // string 購読されるユーザID
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    categoryName,   //  カテゴリ名
    targetUserId,   //  購読されるユーザID
)

購読の解除

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
categoryName string true カテゴリ名
targetUserId string true 購読されるユーザID
パラメータ データ型 説明
item EzSubscribeUser 解除した購読対象

スコア

スコア

EzScore

パラメータ データ型 必須 説明
categoryName string true カテゴリ名
userId string true ユーザID
scorerUserId string true スコアを獲得したユーザID
score long true スコア
metadata string false メタデータ

ランキング

ランキング

EzRanking

パラメータ データ型 必須 説明
rank long true 順位
index long true 1位からのインデックス
userId string true ユーザID
score long true スコア
metadata string false メタデータ
createdAt long true 作成日時

putScore

yield return gs2.Ranking.PutScore(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.CategoryName) // string カテゴリ名
            Debug.Log(r.Result.Item.UserId) // string ユーザID
            Debug.Log(r.Result.Item.ScorerUserId) // string スコアを獲得したユーザID
            Debug.Log(r.Result.Item.Score) // long スコア
            Debug.Log(r.Result.Item.Metadata) // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    categoryName,   //  カテゴリ名
    score,   //  スコア
    metadata,   //  メタデータ(オプション値)
)
return client.ranking.putScore(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPutScoreResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getCategoryName(); // string カテゴリ名
            // r.getResult()->getItem().getUserId(); // string ユーザID
            // r.getResult()->getItem().getScorerUserId(); // string スコアを獲得したユーザID
            // r.getResult()->getItem().getScore(); // long スコア
            // r.getResult()->getItem().getMetadata(); // string メタデータ
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    categoryName,   //  カテゴリ名
    score,   //  スコア
    metadata,   //  メタデータ(オプション値)
)

ランキングの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
categoryName string true カテゴリ名
score long true スコア
metadata string false メタデータ
パラメータ データ型 説明
item EzScore 登録したスコア

getRanking

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

ランキングの一覧を取得

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

getNearRanking

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

ランキングの一覧を取得

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
categoryName string true カテゴリ名
score long true スコア
パラメータ データ型 説明
items list[Ranking] ランキングのリスト

購読対象

購読対象

EzSubscribeUser

パラメータ データ型 必須 説明
userId string true 購読するユーザID
targetUserId string true 購読されるユーザID

GS2-Realtime

対戦・協力プレイ機能を実現します。

ルームを作成すると、IPアドレス ポート 暗号鍵 の3つの情報が発行されます。 ルームに参加するには、発行された IPアドレス ポート に WebSocket で接続します。 その通信には発行された 暗号鍵 を使用して通信します。

チュートリアル

GS2-Realtime は他のSDKとは異なるインターフェイスを持ちます。 ここでは、ゲームエンジン向けの解説を行います。

システムの概要

GS2-Realtime は WebSocket を通信プロトコルとし、通信に使用するバイナリデータフォーマットとして Protocol Buffers を用います。

GS2-Realtime は全プレイヤーとデータ同期が行われる プロフィール 機能と他のプレイヤーとデータ交換を行うための データ通信 の機能を持ちます。 データ通信を行う際には RelayRealtimeSession::Send を用い、プロフィールの更新には RelayRealtimeSession::UpdateProfile を持ちます。

これらの API の他に RelayRealtimeSession はいくつかのコールバックを持ちます。

コールバック 引数 説明
OnRelayMessage RelayBinaryMessage 他プレイヤーから データ通信 によって受け取ったときにバイナリが渡ってくる
OnJoinPlayer Player ルームに新しいプレイヤーが参加してきたときに新しく参加したプレイヤーの情報が渡ってくる。ルームに参加した直後には参加済みのプレイヤーの情報が渡ってくる
OnLeavePlayer Player ルームからプレイヤーが離脱したときに離脱したプレイヤーの情報が渡ってくる
OnUpdateProfile Player プロフィールを更新したプレイヤーの情報が渡ってくる
OnErrorHandler Error ゲームサーバーでエラーが発生したときにエラー内容が渡ってくる
OnGeneralErrorHandler Exception ゲームサーバー以外の要因でエラーが発生したときにエラー内容が渡ってくる
OnClose ゲームサーバーとの接続が切断されたときに呼び出される
モデル
名前 データ型 説明
connectionId uint32 ルームに参加しているゲームプレイヤーにランダムに割り当てられる数値ベースのID
data bytes バイナリデータ
targetConnectionId repeated uint32 データの宛先のリスト。省略するとルーム内の全員へ送信
名前 データ型 説明
connectionId uint32 ルームに参加しているゲームプレイヤーにランダムに割り当てられる数値ベースのID
userId string ログイン時に使用したアクセストークン所有者のユーザID
profile bytes プロフィールデータ
名前 データ型 説明
component string エラーの発生したコンポーネント名
statusCode uint32 ステータスコード(HTTPプロトコルに準拠)
message string エラーメッセージ

初期化

GS2-Matchmaking の GS2-Realtime 連携機能を利用するか、GS2-Realtime の API を使用して GS2RealtimeClient::WantRoom を呼び出して、ルームを作成します。 ルームの作成が終わると、 WantRoom の引数で指定したユーザIDに対してプッシュ通知が届きます。 そのプッシュ通知をトリガーとして GS2RealtimeClient::GetRoom を呼び出して ゲームサーバの IPアドレス 待受ポート 暗号鍵 を取得します。

ルームの作成時に参加者を確定できない場合も、ルーム名を知る手段さえあれば GS2RealtimeClient::GetRoom を呼び出して必要な情報を取り出せます。 GS2-Matchmaking の GS2-Realtime 連携機能を利用した場合は ギャザリング名 がルーム名に使用されます。

セッションの作成

using (
    var session = new RelayRealtimeSession(
        accessToken, // アクセストークン
        ipAddress, // ゲームサーバのIPアドレス
        port, // ゲームサーバのポート
        encryptionKey, // 暗号鍵
        ByteString.CopyFromUtf8("my profile") // プロフィールの初期値
    )
)
{
    // セッションが有効なスコープ
}

ゲームサーバの起動が終わったらゲームサーバへの接続を行います。 RelayRealtimeSession クラスがゲームサーバとの通信を表現します。

スコープを抜けると自動的に切断処理が行われます。

イベントハンドラの設定

イベントハンドラの設定

session.OnJoinPlayer += player => {
    // コールバック処理
};

必要に応じて、先に示したイベントハンドラにコールバック処理を割り当てます。

ゲームサーバへの接続

ゲームサーバへの接続

yield return session.Connect(
    r =>
    {
        if (r.Error != null)
        {
            // 接続処理に失敗した場合
        }
    }
)

Connect でゲームサーバへの接続を開始します。 エラーが発生した場合、コールバックにエラーの内容が渡ってきます。

データの送信

データの送信

yield return session.Send(
    r => {
        if (r.Error != null)
        {
            throw r.Error;
        }
    },
    ByteString.CopyFrom(0x00, 0x01, 0x02)
)

yield return session.Send(
    r => {
        if (r.Error != null)
        {
            throw r.Error;
        }
    },
    ByteString.CopyFrom(0x00, 0x01, 0x02),
    new uint[] {targetConnectionId1, targetConnectionId2} // 宛先を指定することも可能
)

Send で他のプレイヤーにデータを送信します。 第三引数に宛先の コネクションID の配列を指定することで、指定したプレイヤーにのみデータを送信できます。

たとえば、バトルロワイヤルのような参加人数が非常に多く広大なフィールドで表現されるゲームでは近くにいないプレイヤーの座標情報はあまり重要ではありません。 そのため プロフィール に一定間隔(たとえば10秒間隔)で記録されたおおよその座標を元に、近くにいるプレイヤーにのみ最新の座標データを送信するようにすることで通信を効率化できます。

プロフィールの更新

プロフィールの更新

yield return session.UpdateProfile(
    r =>
    {
        if (r.Error != null)
        {
            throw r.Error;
        }
    },
    ByteString.CopyFromUtf8("my profile2")
)

UpdateProfile でプロフィールを更新します。 プロフィールを更新すると、ルーム内のすべてのプレイヤーに対して OnUpdateProfile が呼び出されます。 プロフィールのサイズは参加人数によって適切なデータサイズが変わるため、明確に制限をしていません。

ルーム

ルーム

作成直後はIPアドレス・待受ポートは空欄となります。 ゲームサーバの起動が完了するとIPアドレス・待受ポートが設定されます。 IPアドレス・待受ポートが設定されたことをサーバから通知してほしい場合は、 ネームスペースの設定の『ルームの作成が終わったときのプッシュ通知』を設定し、ルームの作成時に通知を受けるユーザIDを設定することで通知が受けられます。

EzRoom

パラメータ データ型 必須 説明
name string true ルーム名
ipAddress string false IPアドレス
port integer false 待受ポート
encryptionKey string false 暗号鍵

getRoom

yield return gs2.Realtime.GetRoom(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.Name) // string ルーム名
            Debug.Log(r.Result.Item.IpAddress) // string IPアドレス
            Debug.Log(r.Result.Item.Port) // integer 待受ポート
            Debug.Log(r.Result.Item.EncryptionKey) // string 暗号鍵
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
)
return client.realtime.getRoom(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRoomResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string ルーム名
            // r.getResult()->getItem().getIpAddress(); // string IPアドレス
            // r.getResult()->getItem().getPort(); // integer 待受ポート
            // r.getResult()->getItem().getEncryptionKey(); // string 暗号鍵
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    roomName,   //  ルーム名
)

ルームの情報を取得

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

GS2-Schedule

ゲーム内のイベントの予定を管理します。

イベントの開催期間は、「何月何日何時から何月何日の何時まで」という絶対期間と、「チュートリアルをクリアしてから24時間」のような相対期間の2種類で設定できます。 相対期間の場合は、何らかの動作の報酬としてイベント開始のトリガーを引く処理を付与することになります。

イベントの期間と連動してクエストを開放したり、商品を販売したり、おしらせを掲載したりゲーム内の時間に関する処理を一括操作できます。

GS2-Auth でアクセストークンを発行する際に時間のオフセットを渡すことができます。 これを使えばQA担当は1日進んだ状態でプレイできる。といったことを実現できます。

トリガー

トリガー

相対時間イベントの開始時間を記録するトリガー

EzTrigger

パラメータ データ型 必須 説明
triggerId string true トリガー
name string true トリガーの名前
createdAt long true 作成日時
expiresAt long false トリガーの有効期限

listTriggers

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

引かれているトリガーの一覧を取得

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[Trigger] トリガーのリスト
nextPageToken string リストの続きを取得するためのページトークン

getTrigger

yield return gs2.Schedule.GetTrigger(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.TriggerId) // string トリガー
            Debug.Log(r.Result.Item.Name) // string トリガーの名前
            Debug.Log(r.Result.Item.CreatedAt) // long 作成日時
            Debug.Log(r.Result.Item.ExpiresAt) // long トリガーの有効期限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    triggerName,   //  トリガーの名前
)
return client.schedule.getTrigger(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetTriggerResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getTriggerId(); // string トリガー
            // r.getResult()->getItem().getName(); // string トリガーの名前
            // r.getResult()->getItem().getCreatedAt(); // long 作成日時
            // r.getResult()->getItem().getExpiresAt(); // long トリガーの有効期限
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    triggerName,   //  トリガーの名前
)

引かれているトリガーを取得

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

イベント

イベント

イベントの開催期間を定義します。 絶対期間・相対期間2種類の期間設定があり、相対期間はゲームプレイヤーによって開催中かどうかが異なります。

EzEvent

パラメータ データ型 必須 説明
name string true イベントの種類名
metadata string false イベントの種類のメタデータ
scheduleType string true イベント期間の種類
repeatType string true 繰り返しの種類
absoluteBegin long true イベントの開始日時
absoluteEnd long true イベントの終了日時
repeatBeginDayOfMonth integer true イベントの繰り返し開始日
repeatEndDayOfMonth integer true イベントの繰り返し終了日
repeatBeginDayOfWeek string true イベントの繰り返し開始曜日
repeatEndDayOfWeek string true イベントの繰り返し終了曜日
repeatBeginHour integer true イベントの繰り返し開始時間
repeatEndHour integer true イベントの繰り返し終了時間
relativeTriggerName string true イベントの開始トリガー
relativeDuration integer true イベントの開催期間(秒)

listEvents

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

開催中のイベント一覧を取得

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

getEvent

yield return gs2.Schedule.GetEvent(
    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.ScheduleType) // string イベント期間の種類
            Debug.Log(r.Result.Item.RepeatType) // string 繰り返しの種類
            Debug.Log(r.Result.Item.AbsoluteBegin) // long イベントの開始日時
            Debug.Log(r.Result.Item.AbsoluteEnd) // long イベントの終了日時
            Debug.Log(r.Result.Item.RepeatBeginDayOfMonth) // integer イベントの繰り返し開始日
            Debug.Log(r.Result.Item.RepeatEndDayOfMonth) // integer イベントの繰り返し終了日
            Debug.Log(r.Result.Item.RepeatBeginDayOfWeek) // string イベントの繰り返し開始曜日
            Debug.Log(r.Result.Item.RepeatEndDayOfWeek) // string イベントの繰り返し終了曜日
            Debug.Log(r.Result.Item.RepeatBeginHour) // integer イベントの繰り返し開始時間
            Debug.Log(r.Result.Item.RepeatEndHour) // integer イベントの繰り返し終了時間
            Debug.Log(r.Result.Item.RelativeTriggerName) // string イベントの開始トリガー
            Debug.Log(r.Result.Item.RelativeDuration) // integer イベントの開催期間(秒)
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    eventName,   //  イベントの種類名
)
return client.schedule.getEvent(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetEventResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string イベントの種類名
            // r.getResult()->getItem().getMetadata(); // string イベントの種類のメタデータ
            // r.getResult()->getItem().getScheduleType(); // string イベント期間の種類
            // r.getResult()->getItem().getRepeatType(); // string 繰り返しの種類
            // r.getResult()->getItem().getAbsoluteBegin(); // long イベントの開始日時
            // r.getResult()->getItem().getAbsoluteEnd(); // long イベントの終了日時
            // r.getResult()->getItem().getRepeatBeginDayOfMonth(); // integer イベントの繰り返し開始日
            // r.getResult()->getItem().getRepeatEndDayOfMonth(); // integer イベントの繰り返し終了日
            // r.getResult()->getItem().getRepeatBeginDayOfWeek(); // string イベントの繰り返し開始曜日
            // r.getResult()->getItem().getRepeatEndDayOfWeek(); // string イベントの繰り返し終了曜日
            // r.getResult()->getItem().getRepeatBeginHour(); // integer イベントの繰り返し開始時間
            // r.getResult()->getItem().getRepeatEndHour(); // integer イベントの繰り返し終了時間
            // r.getResult()->getItem().getRelativeTriggerName(); // string イベントの開始トリガー
            // r.getResult()->getItem().getRelativeDuration(); // integer イベントの開催期間(秒)
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    eventName,   //  イベントの種類名
)

開催中のイベントを取得

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

GS2-Showcase

ゲーム内ストア機能を提供します。

販売する商品には対価と報酬を設定します。対価にも報酬にも複数のリソースを設定できます。

ステップガチャや、初回のみディスカウントといった仕組みを実現するために、商品グループという仕組みがあります。 商品グループは、商品ごとに優先度を付けて複数の商品をまとめる仕組みで、購入可能な条件を満たし、かつもっとも優先度の高い商品が陳列されます。

商品

商品

入手する商品とその対価

EzSalesItem

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

商品グループ

商品グループ

複数の商品をグループ化し、優先度の高い商品から購入可能な商品が陳列されます。

EzSalesItemGroup

パラメータ データ型 必須 説明
name string true 商品グループ名
metadata string false メタデータ
salesItems list[SalesItem] true 商品リスト

陳列棚

陳列棚

陳列棚に陳列する商品または商品グループを設定。

EzShowcase

パラメータ データ型 必須 説明
name string true 商品名
metadata string false 商品のメタデータ
displayItems list[DisplayItem] false インベントリに格納可能なアイテムモデル一覧

getShowcase

yield return gs2.Showcase.GetShowcase(
    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.DisplayItems) // list[DisplayItem] インベントリに格納可能なアイテムモデル一覧
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    showcaseName,   //  商品名
)
return client.showcase.getShowcase(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetShowcaseResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string 商品名
            // r.getResult()->getItem().getMetadata(); // string 商品のメタデータ
            // r.getResult()->getItem().getDisplayItems(); // list[DisplayItem] インベントリに格納可能なアイテムモデル一覧
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    showcaseName,   //  商品名
)

商品棚を取得します

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

buy

yield return gs2.Showcase.Buy(
    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 購入処理の実行に使用するスタンプシート
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    showcaseName,   //  商品名
    displayItemId,   //  陳列商品ID
    config,   //  設定値(オプション値)
)
return client.showcase.buy(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncBuyResult 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 購入処理の実行に使用するスタンプシート
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    showcaseName,   //  商品名
    displayItemId,   //  陳列商品ID
    config,   //  設定値(オプション値)
)

商品を購入します

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
showcaseName string true 商品名
displayItemId string true 陳列商品ID
config list[Config] false 設定値
パラメータ データ型 説明
item EzSalesItem 商品
stampSheet string 購入処理の実行に使用するスタンプシート

陳列された商品

陳列された商品

EzDisplayItem

パラメータ データ型 必須 説明
displayItemId string false 陳列商品ID
type string true 種類
salesItem SalesItem false 陳列する商品
salesItemGroup SalesItemGroup false 陳列する商品グループ

設定値

設定値

EzConfig

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

消費アクション

消費アクション

EzConsumeAction

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

入手アクション

入手アクション

EzAcquireAction

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

GS2-Stamina

現実時間経過によって回復するスタミナ値を実現します。

スタミナには回復間隔と回復量を設定できます。 スタミナには2段階の最大値を設定できます。 1つ目は時間経過による自然回復の最大値。2つ目はUIの都合による最大値です。

GS2では、レベルアップ時にスタミナを全回復するときに公平性を期するため、自然回復の最大値を超えて回復できるようにしています。 一方で、これを無制限に許可してしまうと、UIに破綻をきたしてしまう可能性があります。 そのため、二段階目の最大値を設けており、仮にこちらを超えるようなことが会っても GS2-Distributor を使用していればプレゼントボックスにスタミナ回復リソースを届けられるようになっています。

この仕組みを応用すると、街づくりゲームの採集機能も実装できます。 スタミナモデルに建築物を設定し、スタミナ値を建築物の生産量をとして表現します。

スタミナモデル

スタミナモデル

スタミナの回復間隔や回復量、最大値を設定する。

EzStaminaModel

パラメータ データ型 必須 説明
name string true スタミナの種類名
metadata string false スタミナの種類のメタデータ
recoverIntervalMinutes integer true スタミナを回復する速度(分)
recoverValue integer true 時間経過後に回復する量
initialCapacity integer true スタミナの最大値の初期値
isOverflow boolean true 最大値を超えて回復するか
maxCapacity integer true 溢れた状況での最大値
maxStaminaTable MaxStaminaTable false GS2-Experience と連携する際に使用するスタミナ最大値テーブル
recoverIntervalTable RecoverIntervalTable false GS2-Experience と連携する際に使用する回復間隔テーブル
recoverValueTable RecoverValueTable false GS2-Experience と連携する際に使用する回復量テーブル

listStaminaModels

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

スタミナモデルを認証

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

getStaminaModel

yield return gs2.Stamina.GetStaminaModel(
    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.RecoverIntervalMinutes) // integer スタミナを回復する速度(分)
            Debug.Log(r.Result.Item.RecoverValue) // integer 時間経過後に回復する量
            Debug.Log(r.Result.Item.InitialCapacity) // integer スタミナの最大値の初期値
            Debug.Log(r.Result.Item.IsOverflow) // boolean 最大値を超えて回復するか
            Debug.Log(r.Result.Item.MaxCapacity) // integer 溢れた状況での最大値
            Debug.Log(r.Result.Item.MaxStaminaTable.Name) // string 最大スタミナ値テーブル名
            Debug.Log(r.Result.Item.MaxStaminaTable.Metadata) // string 最大スタミナ値テーブルのメタデータ
            Debug.Log(r.Result.Item.MaxStaminaTable.ExperienceModelId) // string 経験値の種類マスター のGRN
            Debug.Log(r.Result.Item.MaxStaminaTable.Values) // list[integer] ランク毎のスタミナの最大値テーブル
            Debug.Log(r.Result.Item.RecoverIntervalTable.Name) // string スタミナ回復間隔テーブル名
            Debug.Log(r.Result.Item.RecoverIntervalTable.Metadata) // string スタミナ回復間隔テーブルのメタデータ
            Debug.Log(r.Result.Item.RecoverIntervalTable.ExperienceModelId) // string 経験値の種類マスター のGRN
            Debug.Log(r.Result.Item.RecoverIntervalTable.Values) // list[integer] ランク毎のスタミナ回復間隔テーブル
            Debug.Log(r.Result.Item.RecoverValueTable.Name) // string スタミナ回復量テーブル名
            Debug.Log(r.Result.Item.RecoverValueTable.Metadata) // string スタミナ回復量テーブルのメタデータ
            Debug.Log(r.Result.Item.RecoverValueTable.ExperienceModelId) // string 経験値の種類マスター のGRN
            Debug.Log(r.Result.Item.RecoverValueTable.Values) // list[integer] ランク毎のスタミナ回復量テーブル
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    staminaName,   //  スタミナの種類名
)
return client.stamina.getStaminaModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetStaminaModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string スタミナの種類名
            // r.getResult()->getItem().getMetadata(); // string スタミナの種類のメタデータ
            // r.getResult()->getItem().getRecoverIntervalMinutes(); // integer スタミナを回復する速度(分)
            // r.getResult()->getItem().getRecoverValue(); // integer 時間経過後に回復する量
            // r.getResult()->getItem().getInitialCapacity(); // integer スタミナの最大値の初期値
            // r.getResult()->getItem().getIsOverflow(); // boolean 最大値を超えて回復するか
            // r.getResult()->getItem().getMaxCapacity(); // integer 溢れた状況での最大値
            // r.getResult()->getItem().getMaxStaminaTable().getName(); // string 最大スタミナ値テーブル名
            // r.getResult()->getItem().getMaxStaminaTable().getMetadata(); // string 最大スタミナ値テーブルのメタデータ
            // r.getResult()->getItem().getMaxStaminaTable().getExperienceModelId(); // string 経験値の種類マスター のGRN
            // r.getResult()->getItem().getMaxStaminaTable().getValues(); // list[integer] ランク毎のスタミナの最大値テーブル
            // r.getResult()->getItem().getRecoverIntervalTable().getName(); // string スタミナ回復間隔テーブル名
            // r.getResult()->getItem().getRecoverIntervalTable().getMetadata(); // string スタミナ回復間隔テーブルのメタデータ
            // r.getResult()->getItem().getRecoverIntervalTable().getExperienceModelId(); // string 経験値の種類マスター のGRN
            // r.getResult()->getItem().getRecoverIntervalTable().getValues(); // list[integer] ランク毎のスタミナ回復間隔テーブル
            // r.getResult()->getItem().getRecoverValueTable().getName(); // string スタミナ回復量テーブル名
            // r.getResult()->getItem().getRecoverValueTable().getMetadata(); // string スタミナ回復量テーブルのメタデータ
            // r.getResult()->getItem().getRecoverValueTable().getExperienceModelId(); // string 経験値の種類マスター のGRN
            // r.getResult()->getItem().getRecoverValueTable().getValues(); // list[integer] ランク毎のスタミナ回復量テーブル
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    staminaName,   //  スタミナの種類名
)

スタミナモデルを認証

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
staminaName string true スタミナの種類名
パラメータ データ型 説明
item EzStaminaModel スタミナモデル

スタミナの最大値テーブル

スタミナの最大値テーブル

GS2-Experience のランクに基づいてスタミナの最大値を決定するためのテーブル。

EzMaxStaminaTable

パラメータ データ型 必須 説明
name string true 最大スタミナ値テーブル名
metadata string false 最大スタミナ値テーブルのメタデータ
experienceModelId string true 経験値の種類マスター のGRN
values list[integer] true ランク毎のスタミナの最大値テーブル

スタミナ回復間隔テーブル

スタミナ回復間隔テーブル

GS2-Experience のランクに基づいてスタミナ回復間隔を決定するためのテーブル。

EzRecoverIntervalTable

パラメータ データ型 必須 説明
name string true スタミナ回復間隔テーブル名
metadata string false スタミナ回復間隔テーブルのメタデータ
experienceModelId string true 経験値の種類マスター のGRN
values list[integer] true ランク毎のスタミナ回復間隔テーブル

スタミナ回復量テーブル

スタミナ回復量テーブル

GS2-Experience のランクに基づいてスタミナ回復量を決定するためのテーブル。

EzRecoverValueTable

パラメータ データ型 必須 説明
name string true スタミナ回復量テーブル名
metadata string false スタミナ回復量テーブルのメタデータ
experienceModelId string true 経験値の種類マスター のGRN
values list[integer] true ランク毎のスタミナ回復量テーブル

スタミナ

スタミナ

プレイヤーのスタミナ値

EzStamina

パラメータ データ型 必須 説明
staminaName string true スタミナモデルの名前
value integer true 最終更新時におけるスタミナ値
maxValue integer true スタミナの最大値
recoverIntervalMinutes integer false スタミナの回復間隔(分)
recoverValue integer false スタミナの回復量
nextRecoverAt long false 次回スタミナが回復する時間

getStamina

yield return gs2.Stamina.GetStamina(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.StaminaName) // string スタミナモデルの名前
            Debug.Log(r.Result.Item.Value) // integer 最終更新時におけるスタミナ値
            Debug.Log(r.Result.Item.MaxValue) // integer スタミナの最大値
            Debug.Log(r.Result.Item.RecoverIntervalMinutes) // integer スタミナの回復間隔(分)
            Debug.Log(r.Result.Item.RecoverValue) // integer スタミナの回復量
            Debug.Log(r.Result.Item.NextRecoverAt) // long 次回スタミナが回復する時間
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    staminaName,   //  スタミナの種類名
)
return client.stamina.getStamina(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetStaminaResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getStaminaName(); // string スタミナモデルの名前
            // r.getResult()->getItem().getValue(); // integer 最終更新時におけるスタミナ値
            // r.getResult()->getItem().getMaxValue(); // integer スタミナの最大値
            // r.getResult()->getItem().getRecoverIntervalMinutes(); // integer スタミナの回復間隔(分)
            // r.getResult()->getItem().getRecoverValue(); // integer スタミナの回復量
            // r.getResult()->getItem().getNextRecoverAt(); // long 次回スタミナが回復する時間
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    staminaName,   //  スタミナの種類名
)

現在のスタミナを取得

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

consume

yield return gs2.Stamina.Consume(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.Item.StaminaName) // string スタミナモデルの名前
            Debug.Log(r.Result.Item.Value) // integer 最終更新時におけるスタミナ値
            Debug.Log(r.Result.Item.MaxValue) // integer スタミナの最大値
            Debug.Log(r.Result.Item.RecoverIntervalMinutes) // integer スタミナの回復間隔(分)
            Debug.Log(r.Result.Item.RecoverValue) // integer スタミナの回復量
            Debug.Log(r.Result.Item.NextRecoverAt) // long 次回スタミナが回復する時間
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    staminaName,   //  スタミナの種類名
    consumeValue,   //  消費するスタミナ量
)
return client.stamina.consume(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncConsumeResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getStaminaName(); // string スタミナモデルの名前
            // r.getResult()->getItem().getValue(); // integer 最終更新時におけるスタミナ値
            // r.getResult()->getItem().getMaxValue(); // integer スタミナの最大値
            // r.getResult()->getItem().getRecoverIntervalMinutes(); // integer スタミナの回復間隔(分)
            // r.getResult()->getItem().getRecoverValue(); // integer スタミナの回復量
            // r.getResult()->getItem().getNextRecoverAt(); // long 次回スタミナが回復する時間
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    staminaName,   //  スタミナの種類名
    consumeValue,   //  消費するスタミナ量
)

スタミナを消費

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
staminaName string true スタミナの種類名
consumeValue integer true 消費するスタミナ量
パラメータ データ型 説明
item EzStamina スタミナ

GS2-Version

ゲームのバージョンチェックを実現します。 バージョンチェックを通過すると、新しいプロジェクトトークンを取得できます。 つまり、ゲームに組み込むクレデンシャルはバージョンチェックを行うのに十分な権限のみ付与し、バージョンチェックを通過することでゲームを動作させるのに十分な権限のプロジェクトトークンを取得できるようにすることで、バージョンチェックを通らなければゲームが遊べない状態を作り出します。

ネームスペースには最大10個のバージョンモデルを宣言でき、すべてのバージョンが要求バージョン以上のときにのみバージョンチェックを通過とみなします。

バージョン

バージョン

EzVersion

パラメータ データ型 必須 説明
major integer true メジャーバージョン
minor integer true マイナーバージョン
micro integer true マイクロバージョン

バージョン設定

バージョン設定

EzVersionModel

パラメータ データ型 必須 説明
name string true バージョンの種類名
metadata string false バージョンの種類のメタデータ
warningVersion Version true バージョンアップを促すバージョン
errorVersion Version true バージョンチェックを蹴るバージョン
scope string true 判定に使用するバージョン値の種類
currentVersion Version true 現在のバージョン
needSignature boolean true 判定するバージョン値に署名検証を必要とするか

listVersionModels

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

バージョン設定を認証

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
パラメータ データ型 説明
items list[VersionModel] バージョン設定のリスト

getVersionModel

yield return gs2.Version.GetVersionModel(
    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.WarningVersion.Major) // integer メジャーバージョン
            Debug.Log(r.Result.Item.WarningVersion.Minor) // integer マイナーバージョン
            Debug.Log(r.Result.Item.WarningVersion.Micro) // integer マイクロバージョン
            Debug.Log(r.Result.Item.ErrorVersion.Major) // integer メジャーバージョン
            Debug.Log(r.Result.Item.ErrorVersion.Minor) // integer マイナーバージョン
            Debug.Log(r.Result.Item.ErrorVersion.Micro) // integer マイクロバージョン
            Debug.Log(r.Result.Item.Scope) // string 判定に使用するバージョン値の種類
            Debug.Log(r.Result.Item.CurrentVersion.Major) // integer メジャーバージョン
            Debug.Log(r.Result.Item.CurrentVersion.Minor) // integer マイナーバージョン
            Debug.Log(r.Result.Item.CurrentVersion.Micro) // integer マイクロバージョン
            Debug.Log(r.Result.Item.NeedSignature) // boolean 判定するバージョン値に署名検証を必要とするか
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    versionName,   //  バージョン名
)
return client.version.getVersionModel(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetVersionModelResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getItem().getName(); // string バージョンの種類名
            // r.getResult()->getItem().getMetadata(); // string バージョンの種類のメタデータ
            // r.getResult()->getItem().getWarningVersion().getMajor(); // integer メジャーバージョン
            // r.getResult()->getItem().getWarningVersion().getMinor(); // integer マイナーバージョン
            // r.getResult()->getItem().getWarningVersion().getMicro(); // integer マイクロバージョン
            // r.getResult()->getItem().getErrorVersion().getMajor(); // integer メジャーバージョン
            // r.getResult()->getItem().getErrorVersion().getMinor(); // integer マイナーバージョン
            // r.getResult()->getItem().getErrorVersion().getMicro(); // integer マイクロバージョン
            // r.getResult()->getItem().getScope(); // string 判定に使用するバージョン値の種類
            // r.getResult()->getItem().getCurrentVersion().getMajor(); // integer メジャーバージョン
            // r.getResult()->getItem().getCurrentVersion().getMinor(); // integer マイナーバージョン
            // r.getResult()->getItem().getCurrentVersion().getMicro(); // integer マイクロバージョン
            // r.getResult()->getItem().getNeedSignature(); // boolean 判定するバージョン値に署名検証を必要とするか
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    versionName,   //  バージョン名
)

バージョン設定を認証

パラメータ データ型 必須 説明
namespaceName string true ネームスペース名
versionName string true バージョン名
パラメータ データ型 説明
item EzVersionModel バージョン設定

承認したバージョン

承認したバージョン

EzAcceptVersion

パラメータ データ型 必須 説明
versionName string true 承認したバージョン名
userId string true ユーザーID
version Version true 承認したバージョン

list

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

承認したバージョンの一覧を取得

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

delete

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

承認したバージョンを削除する

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

リソース配信

リソース配信

checkVersion

yield return gs2.Version.CheckVersion(
    r => {
        if (r.Error != null)
        {
            // エラーが発生した場合に到達
            // r.Error は発生した例外オブジェクトが格納されている
        }
        else
        {
            Debug.Log(r.Result.ProjectToken) // string プロジェクトトークン
            Debug.Log(r.Result.Warnings) // list[Status] バージョンの検証結果のリスト
            Debug.Log(r.Result.Errors) // list[Status] バージョンの検証結果のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetVersions,   //  加算するリソース(オプション値)
)
return client.version.checkVersion(
    GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCheckVersionResult r)
    {
        if (r.getError())
        {
            // エラーが発生した場合に到達
            // *r.getError() で発生した例外オブジェクトを取得できる
        }
        else
        {
            // r.getResult()->getProjectToken(); // string プロジェクトトークン
            // r.getResult()->getWarnings(); // list[Status] バージョンの検証結果のリスト
            // r.getResult()->getErrors(); // list[Status] バージョンの検証結果のリスト
        }
    },
    gameSession,    // GameSession ログイン状態を表すセッションオブジェクト
    namespaceName,   //  ネームスペース名
    targetVersions,   //  加算するリソース(オプション値)
)

スタンプタスクを実行

パラメータ データ型 必須 説明
session GameSession true ログイン状態を表すセッションオブジェクト
namespaceName string true ネームスペース名
targetVersions list[TargetVersion] false 加算するリソース
パラメータ データ型 説明
projectToken string プロジェクトトークン
warnings list[Status] バージョンの検証結果のリスト
errors list[Status] バージョンの検証結果のリスト

バージョンの検証結果

バージョンの検証結果

EzStatus

パラメータ データ型 必須 説明
versionModel VersionModel true バージョン設定
currentVersion Version true 現在のバージョン

検証するバージョン

検証するバージョン

スコープが passive のバージョンに関して、クライアントのバージョン情報を送信する

EzTargetVersion

パラメータ データ型 必須 説明
versionName string true バージョンの名前
version Version true バージョン
body string false ボディ
signature string false 署名