GS2-SDK for GameEngine
Game Server Services は 主要なゲームエンジンから利用できるSDKを提供しています。 ゲームエンジン向け SDK では、ゲーム内から利用することにフォーカスして通常の SDK より高レベルなAPI形式で提供しています。
GS2 SDK for Unity
本 SDK 自身は Apache License 2.0 で提供されています。 プログラムのどこかで Apache License 2.0 で提供されているライブラリを使用していることを明示する必要があります。
本 SDK にはパブリックドメインである LitJson(Gs2/Plugin/LitJson.dll) が含まれています。 この dll は GS2 SDK の動作の根幹に関わる動作に利用されているため、削除することが出来ません。
本 SDK には MIT License である websocket-sharp(Gs2/Plugin/websocket-sharp.dll) が含まれています。 表記すべきライセンスは以下です。 https://raw.githubusercontent.com/sta/websocket-sharp/master/LICENSE.txt この dll は GS2 SDK の動作の根幹に関わる動作に利用されているため、削除することが出来ません。
本 SDK には BSD License である protobuf(Gs2/Plugin/Google.Protobuf.dll) が含まれています。 表記すべきライセンスは以下です。 https://github.com/protocolbuffers/protobuf/blob/master/LICENSE この dll は GS2-Realtime を使用しなければ削除することが出来ます。
導入手順
Unity 2019.3 以降をご利用の場合
GS2 SDK for Unity Installer Version 2021.5.1
Unity Editor を起動し、メニューの Import Package から .unitypackage
ファイルをインポートします。
その後、Unity Editor のメニューから 『Game Server Services > インストール』 を選択して、ウィザードの指示に従ってください。
インストール完了後、正しく動作しない場合があります。その場合は一度Unity Editorを再起動してみてください。
Unity 2019.2 以前をご利用の場合
Clone or Download を選択し、ダウンロードしたソースコードをプロジェクト内に配置します。
※ 上記インストーラーを利用する実装は Unity Package Manager を使用して SDK をプロジェクトに追加します。 しかし、 Unity Editor の不具合によって、2019.2 以前では正しく動作しません
Unity Release Note 2019.3.0
Package Manager: Fixed an issue where using some npm registry backends as scoped registries would fail with an error like com.foo.bar: Cannot read property '0.0.1' of undefined. (1177614)
実装上の諸注意
Windows向けにビルドするときはBuildSettingsでx86からx86_64に変更してください。x86ではエラーが出ます。
GS2 SDK for Unreal Engine 4
本 SDK 自身は Apache License 2.0 で提供されています。 プログラムのどこかで Apache License 2.0 で提供されているライブラリを使用していることを明示する必要があります。
本 SDK には Game Server Services 株式会社によってカスタマイズされた以下のソフトウェアが含まれています。
これらは SDK の動作の根幹に関わる動作に利用されているため、削除することができません。 これらのソフトウェアにおける、 Game Server Service 株式会社による改変部分のライセンスは、各ソフトウェアの規定するところに基づき、 Apache License 2.0 で提供されています。 それ以外の部分については、各ソフトウェアのライセンスに従います。 いずれのライセンスも、各ソフトウェアの著作権表示とライセンスの全文を、配布するソフトウェアの複製に含める必要があります。
ダウンロード
GS2 SDK for Unreal Engine 4 Version 2021.7.1
導入手順
SDK のダウンロードパッケージを展開し、ご使用の Unreal Engine 4 プロジェクトに対して、以下の変更を行います。
- Source/(プロジェクト名) 以下の任意の場所に gs2-unreal-engine-sdk/gs2 ディレクトリをコピーします。
- (プロジェクト名).Build.cs に以下の変更を加えます。
- PublicDependencyModuleNames に "HTTP" および "WebSockets" を追加します。
- 例: PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HTTP", "WebSockets" });
- PublicSystemIncludePaths に GS2 SDK for Unreal Engine 4 の gs2 ディレクトリがある場所を追加します。
- 例: PublicSystemIncludePaths.Add(System.IO.Path.Combine(ModuleDirectory, "gs2-unreal-engine-sdk/src/"));
- PublicDependencyModuleNames に "HTTP" および "WebSockets" を追加します。
- (プロジェクト名).uproject のコンテキストメニューから Visual Studio プロジェクトを再生成します。
実装上の諸注意
- ブループリントには非対応です。
- GS2-Realtime の一部機能には未対応です。
- GS2 SDK for Unreal Engine 4 の API で値渡しされるモデルやリザルト、リクエストは、内部バッファへの shared_ptr のラッパとして実装されています。 このため、メソッドへ受け渡した、もしくはコールバックから受け渡されたオブジェクトに変更を加えることは、予期せぬ影響を及ぼす可能性があることに注意してください。 内部バッファを共有しないオブジェクトの複製を作成するには、各クラスのメンバである deepCopy() 関数を使用します。
GS2 SDK for Cocos2d-x
本 SDK 自身は Apache License 2.0 で提供されています。 プログラムのどこかで Apache License 2.0 で提供されているライブラリを使用していることを明示する必要があります。
本 SDK には Game Server Services 株式会社によってカスタマイズされた以下のソフトウェアが含まれています。
これらは SDK の動作の根幹に関わる動作に利用されているため、削除することができません。 これらのソフトウェアにおける、 Game Server Service 株式会社による改変部分のライセンスは、各ソフトウェアの規定するところに基づき、 Apache License 2.0 で提供されています。 それ以外の部分については、各ソフトウェアのライセンスに従います。 いずれのライセンスも、各ソフトウェアの著作権表示とライセンスの全文を、配布するソフトウェアの複製に含める必要があります。
ダウンロード
GS2 SDK for Cocos2d-x Version 2020.3.4
導入手順
SDK のダウンロードパッケージを展開し、ご使用の Cocos2d-x プロジェクトに対して、以下の変更を行います。
- プロジェクト直下の 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})
- SDK パッケージの gs2 ディレクトリをサブディレクトリに加えます。
実装上の諸注意
- GS2-Realtime の一部機能には未対応です。
- GS2 SDK for Cocos2d-x の API で値渡しされるモデルやリザルト、リクエストは、内部バッファへの shared_ptr のラッパとして実装されています。 このため、メソッドへ受け渡した、もしくはコールバックから受け渡されたオブジェクトに変更を加えることは、予期せぬ影響を及ぼす可能性があることに注意してください。 内部バッファを共有しないオブジェクトの複製を作成するには、各クラスのメンバである deepCopy() 関数を使用します。
GS2-Account
ゲームにログイン機能を追加したいときに使用します。
デバイスの機種変更時にデータを引き継げるようにするために メールアドレス+パスワード や ソーシャルアカウントを利用したデータの引き継ぎ機能に対応しています。
ゲームプレイヤーアカウント
ゲームプレイヤーアカウント
Account はゲームプレイヤーを特定するためのユーザIDとパスワードを記録します。
EzAccount
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | アカウントID |
password | string | true | パスワード |
createdAt | long | true | 作成日時 |
create
yield return gs2.Account.Create(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string アカウントID
Debug.Log(r.Result.Item.Password); // string パスワード
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
}
},
namespaceName, // ネームスペース名
);
return client.account.create(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string アカウントID
// r.getResult()->getItem().getPassword(); // string パスワード
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
}
},
namespaceName, // ネームスペース名
);
ゲームプレイヤーを識別するアカウントを新規作成
このAPIの実行に成功すると、作成したアカウントの情報が返ります。 返ったアカウント情報のうち、認証処理に使用するユーザIDとパスワードを永続化してください。
ここで発行されるパスワードはランダム値であり、ゲームプレイヤーの任意の値を指定することはできません。
引き継ぎ設定
としてゲームプレイヤーにとってわかりやすい識別子を登録することができます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzAccount | 作成したゲームプレイヤーアカウント |
authentication
yield return gs2.Account.Authentication(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string アカウントID
Debug.Log(r.Result.Item.Password); // string パスワード
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Body); // string 署名対象のアカウント情報
Debug.Log(r.Result.Signature); // string 署名
}
},
namespaceName, // ネームスペース名
userId, // アカウントID
keyId, // 認証トークンの暗号化に使用する暗号鍵 のGRN
password, // パスワード
);
return client.account.authentication(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAuthenticationResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string アカウントID
// r.getResult()->getItem().getPassword(); // string パスワード
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getBody(); // string 署名対象のアカウント情報
// r.getResult()->getSignature(); // string 署名
}
},
namespaceName, // ネームスペース名
userId, // アカウントID
keyId, // 認証トークンの暗号化に使用する暗号鍵 のGRN
password, // パスワード
);
アカウントの認証
create 関数で発行したユーザID・パスワードを使用してゲームプレイヤーの認証を行います。
認証が完了すると アカウント認証情報
と 署名
が発行されます。
アカウント認証情報
と 署名
を GS2-Auth::Login にわたすことで、GS2の各サービスにアクセスするための アクセストークン
を得ることができます。
なおこのAPIとGS2-Auth::LoginをひとまとめにしたものがGS2-Profile::Loginではじめかた⇒サンプルプログラムで解説しています。
アカウント認証情報
と 署名
は1時間の有効期限が存在します。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
userId | string | true | アカウントID |
keyId | string | true | 認証トークンの暗号化に使用する暗号鍵 のGRN |
password | string | true | パスワード |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzAccount | ゲームプレイヤーアカウント |
body | string | 署名対象のアカウント情報 |
signature | string | 署名 |
引き継ぎ設定
引き継ぎ設定
TakeOver はアカウントの引き継ぎ設定を保存します。 引き継ぎ設定とは、メールアドレスやソーシャルメディアのアカウントIDなどゲームプレイヤーを識別するためのIDとパスワードを組み合わせたものです。 異なるデバイスにアカウントを引き継ぐときに入力してもらいます。
引き継ぎに成功した際にアカウントのパスワードを変更する機能があります。 これによって、デバイスの引き継ぎを行ったあと、以前使用していたデバイスからの認証がエラーになるようになります。
EzTakeOver
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
type | integer | true | スロット番号 |
userIdentifier | string | true | 引き継ぎ用ユーザーID |
createdAt | long | true | 作成日時 |
addTakeOverSetting
yield return gs2.Account.AddTakeOverSetting(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Type); // integer スロット番号
Debug.Log(r.Result.Item.UserIdentifier); // string 引き継ぎ用ユーザーID
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
type, // スロット番号
userIdentifier, // 引き継ぎ用ユーザーID
password, // パスワード
);
return client.account.addTakeOverSetting(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAddTakeOverSettingResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getType(); // integer スロット番号
// r.getResult()->getItem().getUserIdentifier(); // string 引き継ぎ用ユーザーID
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
type, // スロット番号
userIdentifier, // 引き継ぎ用ユーザーID
password, // パスワード
);
引き継ぎ設定
を追加
引き継ぎ設定
は機種変更などを行ったときにアカウントの引き継ぎをできるようにする設定です。
引き継ぎ設定
は 引き継ぎ用ユーザーID
と 引き継ぎ用パスワード
の組み合わせで実行できるようにします。
スロット番号
に異なる値を指定することで、1つのアカウントに対して複数の `引き継ぎ設定
を保持できます。
たとえば、
スロット番号:0にメールアドレス・パスワード を、
スロット番号:1` にソーシャルメディアのID情報を格納するようにし、
ゲームプレイヤーは好みの引き継ぎ手段を選択できるようにする。といった運用が可能です。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
type | integer | true | スロット番号 |
userIdentifier | string | true | 引き継ぎ用ユーザーID |
password | string | true | パスワード |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzTakeOver | 作成した引き継ぎ設定 |
listTakeOverSettings
yield return gs2.Account.ListTakeOverSettings(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[TakeOver] 引き継ぎ設定のリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.account.listTakeOverSettings(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListTakeOverSettingsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[TakeOver] 引き継ぎ設定のリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
設定されている 引き継ぎ設定
の一覧を取得
ゲームプレイヤーが設定した 引き継ぎ設定
の一覧を取得できます。
設定されている 引き継ぎ用パスワード
の値は取得できません。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[TakeOver] | 引き継ぎ設定のリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
updateTakeOverSetting
yield return gs2.Account.UpdateTakeOverSetting(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Type); // integer スロット番号
Debug.Log(r.Result.Item.UserIdentifier); // string 引き継ぎ用ユーザーID
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
type, // スロット番号
oldPassword, // 古いパスワード
password, // 新しいパスワード
);
return client.account.updateTakeOverSetting(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateTakeOverSettingResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getType(); // integer スロット番号
// r.getResult()->getItem().getUserIdentifier(); // string 引き継ぎ用ユーザーID
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
type, // スロット番号
oldPassword, // 古いパスワード
password, // 新しいパスワード
);
<code>引き継ぎ設定</code>
のパスワードを変更する
このAPIを経由して 引き継ぎ用パスワード
を更新するためには、すでに設定されている 引き継ぎ用パスワード
を知っていなければ実行できません。
セキュアな 引き継ぎ設定
の更新を実現したい場合に使用します。
このAPIを使用する際には、 引き継ぎ設定
の削除APIのアクセス権限を剥奪することを忘れないようにしてください。
ゲームプレイヤーが自分の 引き継ぎ設定
の削除するにはパスワードの認証が必要ありません。
削除して再作成することで、実質的に 引き継ぎ用パスワード
の変更ができてしまいます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
type | integer | true | スロット番号 |
oldPassword | string | true | 古いパスワード |
password | string | true | 新しいパスワード |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzTakeOver | 引き継ぎ設定 |
deleteTakeOverSetting
yield return gs2.Account.DeleteTakeOverSetting(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
type, // スロット番号
);
return client.account.deleteTakeOverSetting(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteTakeOverSettingResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
type, // スロット番号
);
引き継ぎ設定
の削除
設定されている 引き継ぎ設定
を削除します。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
type | integer | true | スロット番号 |
- リザルト
パラメータ | データ型 | 説明 |
---|
doTakeOver
yield return gs2.Account.DoTakeOver(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string アカウントID
Debug.Log(r.Result.Item.Password); // string パスワード
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
}
},
namespaceName, // ネームスペース名
type, // スロット番号
userIdentifier, // 引き継ぎ用ユーザーID
password, // パスワード
);
return client.account.doTakeOver(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDoTakeOverResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string アカウントID
// r.getResult()->getItem().getPassword(); // string パスワード
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
}
},
namespaceName, // ネームスペース名
type, // スロット番号
userIdentifier, // 引き継ぎ用ユーザーID
password, // パスワード
);
引き継ぎを実行
指定された 引き継ぎ用ユーザID
と 引き継ぎ用パスワード
が一致していた場合、設定されたアカウント情報を応答します。
応答されたアカウント情報から ユーザID
と パスワード
を永続化して利用してください。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
type | integer | true | スロット番号 |
userIdentifier | string | true | 引き継ぎ用ユーザーID |
password | string | true | パスワード |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzAccount | ゲームプレイヤーアカウント |
GS2-Auth
GS2 のサービス上でゲームプレイヤーを識別するAPIキーとなるアクセストークンを発行します。 アクセストークンの発行手段は2種類存在します。
- GS2-User から取得した認証情報を使用した発行
- 信頼できるサーバシステムからの発行
アクセストークンには1時間の有効期限が存在します。 GS2-SDK for GameEngine を使用していればリフレッシュ処理も自動的に行われます。
アクセストークン
アクセストークン
ユーザIDを特定する情報が記録された文字列。 GS2内のすべてのサービスで、ゲームアプリケーション内から直接GS2のAPIを呼び出すときには、ユーザIDを指定する代わりにアクセストークンを使用します。 これはユーザIDを直接指定するようにすると、容易に他人に成りすましできてしまうためです。
アクセストークンには発行から1時間の有効期限があり、永続化したアクセストークンを使い回すことは想定していません。
EzAccessToken
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
token | string | true | アクセストークン |
userId | string | true | ユーザーID |
expire | long | true | 有効期限 |
login
yield return gs2.Auth.Login(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Token); // string アクセストークン
Debug.Log(r.Result.UserId); // string ユーザーID
Debug.Log(r.Result.Expire); // long 有効期限
}
},
userId, // ユーザーID
keyId, // 署名の作成に使用した暗号鍵 のGRN
body, // アカウント認証情報の署名対象
signature, // 署名
);
return client.auth.login(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncLoginResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getToken(); // string アクセストークン
// r.getResult()->getUserId(); // string ユーザーID
// r.getResult()->getExpire(); // long 有効期限
}
},
userId, // ユーザーID
keyId, // 署名の作成に使用した暗号鍵 のGRN
body, // アカウント認証情報の署名対象
signature, // 署名
);
指定したユーザIDでGS2にログイン
body と signature には GS2-Account::Authentication の結果を指定します。
body と signature の検証に成功すると、 アクセストークン
を応答します。
アクセストークン
は有効期限が1時間の一時的な認証情報で、GS2内の各サービスでゲームプレイヤーを識別するために使用されます。
なおUnityとCocos2d-x向けにGS2-Account::AuthenticationとこのAPIをひとまとめにしたGS2-Profile::Loginを用意しています。
GS2-Profile::Loginははじめかた⇒サンプルプログラムで解説しています。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
keyId | string | true | 署名の作成に使用した暗号鍵 のGRN |
body | string | true | アカウント認証情報の署名対象 |
signature | string | true | 署名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
token | string | アクセストークン |
userId | string | ユーザーID |
expire | long | 有効期限 |
GS2-Chat
テキストベースのチャット機能を提供します。
メッセージデータはルームごとに管理され、過去24時間分のログが保持されます。 ルームにはパスワードを設定でき、設定した場合はメッセージの取得や投稿リクエストにパスワードが必要となります。 ルームにはユーザIDのホワイトリストを設定でき、設定した場合はホワイトリストに含まれるゲームプレイヤーにしかメッセージの取得や投稿ができなくなります。
メッセージにはカテゴリを設定でき、クライアント側でペイロードのパース方法を切り替えることができます。 たとえば、カテゴリ0 はテキストがペイロードにそのまま含まれる。カテゴリ1 はペイロードにスタンプのIDが含まれる。といった使い方ができます。
ルームを購読すれば、ルームに対して新しい投稿があったときにサーバからプッシュ通知を受け取ることができます。
このとき、通知を受けたいカテゴリを設定できますので、メッセージの種類や重要度別にカテゴリを分ければ、ゲームプレイヤーが通知を受け取るメッセージの種類を設定できるようになりユーザ体験を向上させることができます。
また、購読の設定には モバイルプッシュ通知に転送するか
という設定もありますので、うまく活用してください。
ルーム
ルーム
メッセージのタイムラインを保持する単位です。 ルームにパスワードを設定することで、メッセージの投稿や取得時にパスワードを要求するようになります。 ルームにはユーザIDのホワイトリストを設定でき、設定した場合はホワイトリストに含まれるゲームプレイヤー以外は投稿や取得ができなくなります。
EzRoom
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | false | ルーム名 |
metadata | string | false | メタデータ |
createRoom
yield return gs2.Chat.CreateRoom(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string ルーム名
Debug.Log(r.Result.Item.Metadata); // string メタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
name, // ルーム名(オプション値)
metadata, // メタデータ(オプション値)
password, // メッセージを投稿するために必要となるパスワード(オプション値)
whiteListUserIds // ルームに参加可能なユーザIDリスト(オプション値)
);
return client.chat.createRoom(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateRoomResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string ルーム名
// r.getResult()->getItem().getMetadata(); // string メタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
name, // ルーム名(オプション値)
metadata, // メタデータ(オプション値)
password, // メッセージを投稿するために必要となるパスワード(オプション値)
whiteListUserIds // ルームに参加可能なユーザIDリスト(オプション値)
);
ルームの作成
ネームスペースの設定でゲームプレイヤーによるルーム作成が許可されていない場合、失敗します。 ルームにパスワードを設定すると発言する際にパスワードが一致しなければ発言できません。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
name | string | false | ルーム名 |
metadata | string | false | メタデータ |
password | string | false | メッセージを投稿するために必要となるパスワード |
whiteListUserIds | list[string] | false | ルームに参加可能なユーザIDリスト |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRoom | 作成したルーム |
getRoom
yield return gs2.Chat.GetRoom(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string ルーム名
Debug.Log(r.Result.Item.Metadata); // string メタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
);
return client.chat.getRoom(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRoomResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string ルーム名
// r.getResult()->getItem().getMetadata(); // string メタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
);
ルームの取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
roomName | string | true | ルーム名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRoom | ルーム |
deleteRoom
yield return gs2.Chat.DeleteRoom(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string ルーム名
Debug.Log(r.Result.Item.Metadata); // string メタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
);
return client.chat.deleteRoom(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteRoomResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string ルーム名
// r.getResult()->getItem().getMetadata(); // string メタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
);
ルームの削除
自分が作成したルームに対してしか実行できません。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
roomName | string | true | ルーム名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRoom | 削除したルーム |
メッセージ
メッセージ
ルームに投稿するデータです。 カテゴリを設定できますので、カテゴリによってペイロードのパース方法を切り替えたり、投稿の通知を送るかを分岐できます。
EzMessage
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
roomName | string | true | ルーム名 |
userId | string | true | 発言したユーザID |
category | integer | true | メッセージの種類を分類したい時の種類番号 |
metadata | string | true | メタデータ |
createdAt | long | true | 作成日時 |
post
yield return gs2.Chat.Post(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.RoomName); // string ルーム名
Debug.Log(r.Result.Item.UserId); // string 発言したユーザID
Debug.Log(r.Result.Item.Category); // integer メッセージの種類を分類したい時の種類番号
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
category, // メッセージの種類を分類したい時の種類番号
metadata, // メタデータ
password // メッセージを投稿するために必要となるパスワード(オプション値)
);
return client.chat.post(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPostResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getRoomName(); // string ルーム名
// r.getResult()->getItem().getUserId(); // string 発言したユーザID
// r.getResult()->getItem().getCategory(); // integer メッセージの種類を分類したい時の種類番号
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
category, // メッセージの種類を分類したい時の種類番号
metadata, // メタデータ
password // メッセージを投稿するために必要となるパスワード(オプション値)
);
メッセージを投稿します
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
roomName | string | true | ルーム名 |
category | integer | true | メッセージの種類を分類したい時の種類番号 |
metadata | string | true | メタデータ |
password | string | false | メッセージを投稿するために必要となるパスワード |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzMessage | 投稿したメッセージ |
listMessages
yield return gs2.Chat.ListMessages(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Message] メッセージのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
startAt, // メッセージの取得を開始する時間(オプション値)
limit, // データの取得件数(オプション値)
password // メッセージを投稿するために必要となるパスワード(オプション値)
);
return client.chat.listMessages(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMessagesResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Message] メッセージのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
startAt, // メッセージの取得を開始する時間(オプション値)
limit, // データの取得件数(オプション値)
password // メッセージを投稿するために必要となるパスワード(オプション値)
);
ルーム内のメッセージ一覧を取得
startAt にしていた時刻以降に投稿されたメッセージを取得できます startAt と完全一致するメッセージも対象に含まれます
メッセージは投稿の古いものから順番に取得されます
メッセージは過去1時間分まで遡れます
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
roomName | string | true | ルーム名 |
startAt | long | false | メッセージの取得を開始する時間 |
limit | long | false | データの取得件数 |
password | string | false | メッセージを投稿するために必要となるパスワード |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Message] | メッセージのリスト |
購読
購読
ルームに対する新着投稿をプッシュ通知で知らせてほしいときに設定します。
EzSubscribe
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | 購読するユーザID |
roomName | string | true | 購読するルーム名 |
notificationTypes | list[NotificationType] | false | 新着メッセージ通知を受け取るカテゴリリスト |
listSubscribeRooms
yield return gs2.Chat.ListSubscribeRooms(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Subscribe] 購読のリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.chat.listSubscribeRooms(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListSubscribeRoomsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Subscribe] 購読のリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
購読しているルームの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Subscribe] | 購読のリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
subscribe
yield return gs2.Chat.Subscribe(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string 購読するユーザID
Debug.Log(r.Result.Item.RoomName); // string 購読するルーム名
Debug.Log(r.Result.Item.NotificationTypes); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
notificationTypes // 新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);
return client.chat.subscribe(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSubscribeResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string 購読するユーザID
// r.getResult()->getItem().getRoomName(); // string 購読するルーム名
// r.getResult()->getItem().getNotificationTypes(); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
notificationTypes // 新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);
ルームを購読
ルームを購読することで、そのルームに関する新着メッセージ投稿の通知を受けることができます 購読する際のオプションとして、「メッセージに付加されたカテゴリが特定の値のものだけ通知する」といった設定や 「通知を受けたときにオフラインだった場合、モバイルプッシュ通知に転送する」といった設定ができます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
roomName | string | true | ルーム名 |
notificationTypes | list[NotificationType] | false | 新着メッセージ通知を受け取るカテゴリリスト |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzSubscribe | 購読した購読 |
updateSubscribeSetting
yield return gs2.Chat.UpdateSubscribeSetting(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string 購読するユーザID
Debug.Log(r.Result.Item.RoomName); // string 購読するルーム名
Debug.Log(r.Result.Item.NotificationTypes); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
notificationTypes // 新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);
return client.chat.updateSubscribeSetting(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateSubscribeSettingResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string 購読するユーザID
// r.getResult()->getItem().getRoomName(); // string 購読するルーム名
// r.getResult()->getItem().getNotificationTypes(); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
notificationTypes // 新着メッセージ通知を受け取るカテゴリリスト(オプション値)
);
購読設定の更新
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
roomName | string | true | ルーム名 |
notificationTypes | list[NotificationType] | false | 新着メッセージ通知を受け取るカテゴリリスト |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzSubscribe | 更新した購読 |
unsubscribe
yield return gs2.Chat.Unsubscribe(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string 購読するユーザID
Debug.Log(r.Result.Item.RoomName); // string 購読するルーム名
Debug.Log(r.Result.Item.NotificationTypes); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
);
return client.chat.unsubscribe(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnsubscribeResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string 購読するユーザID
// r.getResult()->getItem().getRoomName(); // string 購読するルーム名
// r.getResult()->getItem().getNotificationTypes(); // list[NotificationType] 新着メッセージ通知を受け取るカテゴリリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
roomName, // ルーム名
);
購読の解除
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
roomName | string | true | ルーム名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzSubscribe | 解除した購読 |
購読
購読
EzNotificationType
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
category | integer | true | 新着メッセージ通知を受け取るカテゴリ |
enableTransferMobilePushNotification | boolean | true | オフラインだった時にモバイルプッシュ通知に転送するか |
v
GS2-Datastore
任意のバイナリデータをサーバに保存する機能を提供します。 アップロードされたデータはアクセス権限管理(ACL - Access Control List)が適用されます。
- データには誰でもデータにアクセスが可能な public
- 指定したユーザIDのゲームプレイヤーにのみアクセスが可能な protected
- 自身のみがアクセスが可能な private
の3種類のACLが設定できます。
アップロードされたデータは自動的にバックアップが作成され、 データを更新・削除したとしても30日以内であれば復元が可能です。 アップロードされたデータには固有のID(UUID v4)と世代IDが割り当てられ、 データを更新・削除すると世代IDが更新されます。 データをダウンロードする際には世代IDを指定して、具体的なファイルを特定します。
データを更新するのと同時に他プレイヤーがデータにアクセスしようとしたときに 意図せず新しいバージョンのデータを取得しないようにダウンロードリクエストには世代IDを含めることができます。 世代IDをダウンロードリクエストに付加することで、確実にリストアップした時点でのデータをダウンロードすることを保証することができます。
ただし、いつまでも世代の古いデータにアクセスできることは望まないゲームもあるかもしれません。 そのため、データの所有者以外は、更新後60分以内かつ1つ前の世代に限り古い世代のデータをダウンロードを許可するオプションが存在します。
本機能を使用してセーブデータの管理をする際には、不正行為に対する耐性を考えてください。 他のGS2のサービスではゲームの仕様に合わせて加算・減算を自由に行えないようコントロールされています。 しかし、ローカルのセーブデータを信頼することはチート行為の原因となりえます。 GS2の機能が提供されている場合はそちらを優先して使用し、 UGCコンテンツの交換や、コンフィグの設定値など改ざんされても影響が軽微な要素のみを管理するようにしてください。
データオブジェクト
データオブジェクト
EzDataObject
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
dataObjectId | string | true | データオブジェクト |
name | string | true | データの名前 |
userId | string | true | ユーザーID |
scope | string | true | ファイルのアクセス権 |
allowUserIds | list[string] | true | 公開するユーザIDリスト |
status | string | true | 状態 |
generation | string | false | データの世代 |
createdAt | long | true | 作成日時 |
updatedAt | long | true | 最終更新日時 |
listMyDataObjects
yield return gs2.Datastore.ListMyDataObjects(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[DataObject] データオブジェクトのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
status, // 状態(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.datastore.listMyDataObjects(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMyDataObjectsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[DataObject] データオブジェクトのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
status, // 状態(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
データオブジェクトの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
status | string | false | 状態 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[DataObject] | データオブジェクトのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
updateDataObject
yield return gs2.Datastore.UpdateDataObject(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
scope, // ファイルのアクセス権
allowUserIds, // 公開するユーザIDリスト
);
return client.datastore.updateDataObject(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateDataObjectResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
scope, // ファイルのアクセス権
allowUserIds, // 公開するユーザIDリスト
);
データオブジェクトを更新
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
scope | string | true | ファイルのアクセス権 |
allowUserIds | list[string] | true | 公開するユーザIDリスト |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
prepareUpload
yield return gs2.Datastore.PrepareUpload(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
Debug.Log(r.Result.UploadUrl); // string アップロード処理の実行に使用するURL
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
scope, // ファイルのアクセス権
allowUserIds, // 公開するユーザIDリスト
name, // データの名前(オプション値)
updateIfExists // 既にデータが存在する場合にエラーとするか、データを更新するか(オプション値)
);
return client.datastore.prepareUpload(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareUploadResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
// r.getResult()->getUploadUrl(); // string アップロード処理の実行に使用するURL
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
scope, // ファイルのアクセス権
allowUserIds, // 公開するユーザIDリスト
name, // データの名前(オプション値)
updateIfExists // 既にデータが存在する場合にエラーとするか、データを更新するか(オプション値)
);
データのアップロード準備
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
name | string | false | データの名前 |
scope | string | true | ファイルのアクセス権 |
allowUserIds | list[string] | true | 公開するユーザIDリスト |
updateIfExists | boolean | false | 既にデータが存在する場合にエラーとするか、データを更新するか |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
uploadUrl | string | アップロード処理の実行に使用するURL |
prepareReUpload
yield return gs2.Datastore.PrepareReUpload(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
Debug.Log(r.Result.UploadUrl); // string アップロード処理の実行に使用するURL
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
return client.datastore.prepareReUpload(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareReUploadResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
// r.getResult()->getUploadUrl(); // string アップロード処理の実行に使用するURL
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
データの再アップロード準備
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
dataObjectName | string | true | データの名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
uploadUrl | string | アップロード処理の実行に使用するURL |
doneUpload
yield return gs2.Datastore.DoneUpload(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
return client.datastore.doneUpload(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDoneUploadResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
データのアップロード完了を報告
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
dataObjectName | string | true | データの名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
prepareDownload
yield return gs2.Datastore.PrepareDownload(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
Debug.Log(r.Result.FileUrl); // string ファイルをダウンロードするためのURL
Debug.Log(r.Result.ContentLength); // long ファイルの容量
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectId, // データオブジェクト
);
return client.datastore.prepareDownload(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareDownloadResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
// r.getResult()->getFileUrl(); // string ファイルをダウンロードするためのURL
// r.getResult()->getContentLength(); // long ファイルの容量
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectId, // データオブジェクト
);
データをダウンロード準備
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
dataObjectId | string | true | データオブジェクト |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
fileUrl | string | ファイルをダウンロードするためのURL |
contentLength | long | ファイルの容量 |
prepareDownloadOwnData
yield return gs2.Datastore.PrepareDownloadOwnData(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
Debug.Log(r.Result.FileUrl); // string ファイルをダウンロードするためのURL
Debug.Log(r.Result.ContentLength); // long ファイルの容量
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
return client.datastore.prepareDownloadOwnData(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareDownloadOwnDataResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
// r.getResult()->getFileUrl(); // string ファイルをダウンロードするためのURL
// r.getResult()->getContentLength(); // long ファイルの容量
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
自分のデータをダウンロード準備
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
dataObjectName | string | true | データの名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
fileUrl | string | ファイルをダウンロードするためのURL |
contentLength | long | ファイルの容量 |
prepareDownloadByUserIdAndDataObjectName
yield return gs2.Datastore.PrepareDownloadByUserIdAndDataObjectName(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
Debug.Log(r.Result.FileUrl); // string ファイルをダウンロードするためのURL
Debug.Log(r.Result.ContentLength); // long ファイルの容量
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
userId, // ユーザーID
dataObjectName, // データの名前
);
return client.datastore.prepareDownloadByUserIdAndDataObjectName(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncPrepareDownloadByUserIdAndDataObjectNameResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
// r.getResult()->getFileUrl(); // string ファイルをダウンロードするためのURL
// r.getResult()->getContentLength(); // long ファイルの容量
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
userId, // ユーザーID
dataObjectName, // データの名前
);
ユーザIDとデータ名を指定してデータをダウンロード準備
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
userId | string | true | ユーザーID |
dataObjectName | string | true | データの名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
fileUrl | string | ファイルをダウンロードするためのURL |
contentLength | long | ファイルの容量 |
deleteDataObject
yield return gs2.Datastore.DeleteDataObject(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.DataObjectId); // string データオブジェクト
Debug.Log(r.Result.Item.Name); // string データの名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Scope); // string ファイルのアクセス権
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 公開するユーザIDリスト
Debug.Log(r.Result.Item.Status); // string 状態
Debug.Log(r.Result.Item.Generation); // string データの世代
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
return client.datastore.deleteDataObject(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteDataObjectResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getDataObjectId(); // string データオブジェクト
// r.getResult()->getItem().getName(); // string データの名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getScope(); // string ファイルのアクセス権
// r.getResult()->getItem().getAllowUserIds(); // list[string] 公開するユーザIDリスト
// r.getResult()->getItem().getStatus(); // string 状態
// r.getResult()->getItem().getGeneration(); // string データの世代
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
dataObjectName, // データの名前
);
アップロードしたデータを削除
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
dataObjectName | string | true | データの名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzDataObject | データオブジェクト |
restoreDataObject
yield return gs2.Datastore.RestoreDataObject(
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, // ネームスペース名
dataObjectId, // データオブジェクト
);
return client.datastore.restoreDataObject(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncRestoreDataObjectResult 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, // ネームスペース名
dataObjectId, // データオブジェクト
);
データの管理情報を修復
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
dataObjectId | 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 | リストの続きを取得するためのページトークン |
GS2-Dictionary
アイテム図鑑やキャラクター図鑑のようなプレイヤー・エントリー毎に「手に入れた」「手に入れない」の二値を持つデータベースを実現します。
エントリーモデル
エントリーモデル
EzEntryModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | エントリーの種類名 |
metadata | string | false | エントリーの種類のメタデータ |
listEntryModels
yield return gs2.Dictionary.ListEntryModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[EntryModel] エントリーモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.dictionary.listEntryModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListEntryModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[EntryModel] エントリーモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
エントリーモデル情報の一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[EntryModel] | エントリーモデルのリスト |
getEntryModel
yield return gs2.Dictionary.GetEntryModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string エントリーの種類名
Debug.Log(r.Result.Item.Metadata); // string エントリーの種類のメタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
entryName, // エントリーモデル名
);
return client.dictionary.getEntryModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetEntryModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string エントリーの種類名
// r.getResult()->getItem().getMetadata(); // string エントリーの種類のメタデータ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
entryName, // エントリーモデル名
);
エントリーモデル情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
entryName | string | true | エントリーモデル名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzEntryModel | エントリーモデル |
エントリー
エントリー
EzEntry
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
entryId | string | true | エントリー のGRN |
userId | string | true | ユーザーID |
name | string | true | エントリーの種類名 |
acquiredAt | long | false |
listEntries
yield return gs2.Dictionary.ListEntries(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Entry] エントリーのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limit, // データの取得件数(オプション値)
pageToken // データの取得を開始する位置を指定するトークン(オプション値)
);
return client.dictionary.listEntries(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListEntriesResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Entry] エントリーのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limit, // データの取得件数(オプション値)
pageToken // データの取得を開始する位置を指定するトークン(オプション値)
);
エントリーの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
limit | long | false | データの取得件数 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Entry] | エントリーのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getEntry
yield return gs2.Dictionary.GetEntry(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.EntryId); // string エントリー のGRN
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Name); // string エントリーの種類名
Debug.Log(r.Result.Item.AcquiredAt); // long None
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
entryModelName, // エントリー名
);
return client.dictionary.getEntry(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetEntryResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getEntryId(); // string エントリー のGRN
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getName(); // string エントリーの種類名
// r.getResult()->getItem().getAcquiredAt(); // long None
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
entryModelName, // エントリー名
);
エントリーを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
entryModelName | string | true | エントリー名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzEntry | エントリー |
getEntryWithSignature
yield return gs2.Dictionary.GetEntryWithSignature(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.EntryId); // string エントリー のGRN
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Name); // string エントリーの種類名
Debug.Log(r.Result.Item.AcquiredAt); // long None
Debug.Log(r.Result.Body); // string 署名対象のエントリー情報
Debug.Log(r.Result.Signature); // string 署名
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
entryModelName, // エントリー名
keyId, // 署名の発行に使用する暗号鍵 のGRN
);
return client.dictionary.getEntryWithSignature(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetEntryWithSignatureResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getEntryId(); // string エントリー のGRN
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getName(); // string エントリーの種類名
// r.getResult()->getItem().getAcquiredAt(); // long None
// r.getResult()->getBody(); // string 署名対象のエントリー情報
// r.getResult()->getSignature(); // string 署名
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
entryModelName, // エントリー名
keyId, // 署名の発行に使用する暗号鍵 のGRN
);
エントリーを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
entryModelName | string | true | エントリー名 |
keyId | string | true | 署名の発行に使用する暗号鍵 のGRN |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzEntry | エントリー |
body | string | 署名対象のエントリー情報 |
signature | string | 署名 |
設定値
設定値
EzConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
key | string | false | 名前 |
value | string | false | 値 |
GS2-Enhance
GS2-Inventory の素材を使用して GS2-Inventory のプロパティIDをキーとする GS2-Experience の経験値を入手する。
強化レートモデル
強化レートモデル
EzRateModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | 強化レート名 |
metadata | string | false | 強化レートのメタデータ |
targetInventoryModelId | string | true | 強化対象に使用できるインベントリモデル のGRN |
acquireExperienceSuffix | string | true | GS2-Experience で入手した経験値を格納する プロパティID に付与するサフィックス |
materialInventoryModelId | string | true | 強化素材に使用できるインベントリモデル のGRN |
experienceModelId | string | true | 獲得できる経験値の種類マスター のGRN |
listRateModels
yield return gs2.Enhance.ListRateModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[RateModel] 強化レートモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.enhance.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.Enhance.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.TargetInventoryModelId); // string 強化対象に使用できるインベントリモデル のGRN
Debug.Log(r.Result.Item.AcquireExperienceSuffix); // string GS2-Experience で入手した経験値を格納する プロパティID に付与するサフィックス
Debug.Log(r.Result.Item.MaterialInventoryModelId); // string 強化素材に使用できるインベントリモデル のGRN
Debug.Log(r.Result.Item.ExperienceModelId); // string 獲得できる経験値の種類マスター のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 強化レート名
);
return client.enhance.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().getTargetInventoryModelId(); // string 強化対象に使用できるインベントリモデル のGRN
// r.getResult()->getItem().getAcquireExperienceSuffix(); // string GS2-Experience で入手した経験値を格納する プロパティID に付与するサフィックス
// r.getResult()->getItem().getMaterialInventoryModelId(); // string 強化素材に使用できるインベントリモデル のGRN
// r.getResult()->getItem().getExperienceModelId(); // string 獲得できる経験値の種類マスター のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 強化レート名
);
強化レートモデル情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 強化レート名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRateModel | 強化レートモデル |
強化
強化
enhance
yield return gs2.Enhance.Enhance(
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.TargetInventoryModelId); // string 強化対象に使用できるインベントリモデル のGRN
Debug.Log(r.Result.Item.AcquireExperienceSuffix); // string GS2-Experience で入手した経験値を格納する プロパティID に付与するサフィックス
Debug.Log(r.Result.Item.MaterialInventoryModelId); // string 強化素材に使用できるインベントリモデル のGRN
Debug.Log(r.Result.Item.ExperienceModelId); // string 獲得できる経験値の種類マスター のGRN
Debug.Log(r.Result.StampSheet); // string 強化処理の実行に使用するスタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
Debug.Log(r.Result.AcquireExperience); // long 獲得経験値量
Debug.Log(r.Result.BonusRate); // float 経験値ボーナスの倍率(1.0=ボーナスなし)
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 強化レート名
targetItemSetId, // 強化対象の GS2-Inventory アイテムセットGRN
materials, // 強化素材リスト
config // 設定値(オプション値)
);
return client.enhance.enhance(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncEnhanceResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string 強化レート名
// r.getResult()->getItem().getMetadata(); // string 強化レートのメタデータ
// r.getResult()->getItem().getTargetInventoryModelId(); // string 強化対象に使用できるインベントリモデル のGRN
// r.getResult()->getItem().getAcquireExperienceSuffix(); // string GS2-Experience で入手した経験値を格納する プロパティID に付与するサフィックス
// r.getResult()->getItem().getMaterialInventoryModelId(); // string 強化素材に使用できるインベントリモデル のGRN
// r.getResult()->getItem().getExperienceModelId(); // string 獲得できる経験値の種類マスター のGRN
// r.getResult()->getStampSheet(); // string 強化処理の実行に使用するスタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
// r.getResult()->getAcquireExperience(); // long 獲得経験値量
// r.getResult()->getBonusRate(); // float 経験値ボーナスの倍率(1.0=ボーナスなし)
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 強化レート名
targetItemSetId, // 強化対象の GS2-Inventory アイテムセットGRN
materials, // 強化素材リスト
config // 設定値(オプション値)
);
強化を実行
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 強化レート名 |
targetItemSetId | string | true | 強化対象の GS2-Inventory アイテムセットGRN |
materials | list[Material] | true | 強化素材リスト |
config | list[Config] | false | 設定値 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRateModel | 強化レートモデル |
stampSheet | string | 強化処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
acquireExperience | long | 獲得経験値量 |
bonusRate | float | 経験値ボーナスの倍率(1.0=ボーナスなし) |
強化実行
強化実行
強化中の強化を管理するモデル。
EzProgress
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
progressId | string | true | 強化実行 |
rateName | string | true | レートモデル名 |
propertyId | string | true | 強化対象のプロパティID |
experienceValue | integer | true | 入手できる経験値 |
rate | float | true | 経験値倍率 |
start
yield return gs2.Enhance.Start(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.StampSheet); // string 強化の開始処理の実行に使用するスタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 強化レート名
targetItemSetId, // 強化対象の GS2-Inventory アイテムセットGRN
materials, // 強化素材リスト
force, // すでに開始している強化がある場合にそれを破棄して開始するか(オプション値)
config // スタンプシートの変数に適用する設定値(オプション値)
);
return client.enhance.start(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncStartResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getStampSheet(); // string 強化の開始処理の実行に使用するスタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 強化レート名
targetItemSetId, // 強化対象の GS2-Inventory アイテムセットGRN
materials, // 強化素材リスト
force, // すでに開始している強化がある場合にそれを破棄して開始するか(オプション値)
config // スタンプシートの変数に適用する設定値(オプション値)
);
強化の開始を宣言
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 強化レート名 |
targetItemSetId | string | true | 強化対象の GS2-Inventory アイテムセットGRN |
materials | list[Material] | true | 強化素材リスト |
force | boolean | false | すでに開始している強化がある場合にそれを破棄して開始するか |
config | list[Config] | false | スタンプシートの変数に適用する設定値 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
stampSheet | string | 強化の開始処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
end
yield return gs2.Enhance.End(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.ProgressId); // string 強化実行
Debug.Log(r.Result.Item.RateName); // string レートモデル名
Debug.Log(r.Result.Item.PropertyId); // string 強化対象のプロパティID
Debug.Log(r.Result.Item.ExperienceValue); // integer 入手できる経験値
Debug.Log(r.Result.Item.Rate); // float 経験値倍率
Debug.Log(r.Result.StampSheet); // string 報酬付与処理の実行に使用するスタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
Debug.Log(r.Result.AcquireExperience); // long 獲得経験値量
Debug.Log(r.Result.BonusRate); // float 経験値ボーナスの倍率(1.0=ボーナスなし)
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
config // スタンプシートの変数に適用する設定値(オプション値)
);
return client.enhance.end(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncEndResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getProgressId(); // string 強化実行
// r.getResult()->getItem().getRateName(); // string レートモデル名
// r.getResult()->getItem().getPropertyId(); // string 強化対象のプロパティID
// r.getResult()->getItem().getExperienceValue(); // integer 入手できる経験値
// r.getResult()->getItem().getRate(); // float 経験値倍率
// r.getResult()->getStampSheet(); // string 報酬付与処理の実行に使用するスタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
// r.getResult()->getAcquireExperience(); // long 獲得経験値量
// r.getResult()->getBonusRate(); // float 経験値ボーナスの倍率(1.0=ボーナスなし)
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
config // スタンプシートの変数に適用する設定値(オプション値)
);
強化の完了を報告
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
config | list[Config] | false | スタンプシートの変数に適用する設定値 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzProgress | 強化実行 |
stampSheet | string | 報酬付与処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
acquireExperience | long | 獲得経験値量 |
bonusRate | float | 経験値ボーナスの倍率(1.0=ボーナスなし) |
getProgress
yield return gs2.Enhance.GetProgress(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.ProgressId); // string 強化実行
Debug.Log(r.Result.Item.RateName); // string レートモデル名
Debug.Log(r.Result.Item.PropertyId); // string 強化対象のプロパティID
Debug.Log(r.Result.Item.ExperienceValue); // integer 入手できる経験値
Debug.Log(r.Result.Item.Rate); // float 経験値倍率
Debug.Log(r.Result.RateModel.Name); // string 強化レート名
Debug.Log(r.Result.RateModel.Metadata); // string 強化レートのメタデータ
Debug.Log(r.Result.RateModel.TargetInventoryModelId); // string 強化対象に使用できるインベントリモデル のGRN
Debug.Log(r.Result.RateModel.AcquireExperienceSuffix); // string GS2-Experience で入手した経験値を格納する プロパティID に付与するサフィックス
Debug.Log(r.Result.RateModel.MaterialInventoryModelId); // string 強化素材に使用できるインベントリモデル のGRN
Debug.Log(r.Result.RateModel.ExperienceModelId); // string 獲得できる経験値の種類マスター のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.enhance.getProgress(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetProgressResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getProgressId(); // string 強化実行
// r.getResult()->getItem().getRateName(); // string レートモデル名
// r.getResult()->getItem().getPropertyId(); // string 強化対象のプロパティID
// r.getResult()->getItem().getExperienceValue(); // integer 入手できる経験値
// r.getResult()->getItem().getRate(); // float 経験値倍率
// r.getResult()->getRateModel().getName(); // string 強化レート名
// r.getResult()->getRateModel().getMetadata(); // string 強化レートのメタデータ
// r.getResult()->getRateModel().getTargetInventoryModelId(); // string 強化対象に使用できるインベントリモデル のGRN
// r.getResult()->getRateModel().getAcquireExperienceSuffix(); // string GS2-Experience で入手した経験値を格納する プロパティID に付与するサフィックス
// r.getResult()->getRateModel().getMaterialInventoryModelId(); // string 強化素材に使用できるインベントリモデル のGRN
// r.getResult()->getRateModel().getExperienceModelId(); // string 獲得できる経験値の種類マスター のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
強化の進行情報を取得。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzProgress | 強化実行 |
rateModel | EzRateModel | 強化レートモデル |
deleteProgress
yield return gs2.Enhance.DeleteProgress(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.ProgressId); // string 強化実行
Debug.Log(r.Result.Item.RateName); // string レートモデル名
Debug.Log(r.Result.Item.PropertyId); // string 強化対象のプロパティID
Debug.Log(r.Result.Item.ExperienceValue); // integer 入手できる経験値
Debug.Log(r.Result.Item.Rate); // float 経験値倍率
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.enhance.deleteProgress(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteProgressResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getProgressId(); // string 強化実行
// r.getResult()->getItem().getRateName(); // string レートモデル名
// r.getResult()->getItem().getPropertyId(); // string 強化対象のプロパティID
// r.getResult()->getItem().getExperienceValue(); // integer 入手できる経験値
// r.getResult()->getItem().getRate(); // float 経験値倍率
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
強化の進行情報を削除。
強化の開始時に force
オプションを使うのではなく、明示的に進行情報を削除したい場合に使用してください。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzProgress | 強化実行 |
設定値
設定値
EzConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
key | string | false | 名前 |
value | string | false | 値 |
素材
素材
EzMaterial
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
materialItemSetId | string | true | 強化対象の GS2-Inventory アイテムセットGRN |
count | integer | true | 消費数量 |
GS2-Exchange
アイテムの売却価格や、レアリティが異なる進化素材間の交換レートなど、常設される交換処理を実現します。
交換レートモデル
交換レートモデル
EzRateModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | 交換レートの種類名 |
metadata | string | false | 交換レートの種類のメタデータ |
consumeActions | list[ConsumeAction] | true | 消費アクションリスト |
acquireActions | list[AcquireAction] | true | 入手アクションリスト |
listRateModels
yield return gs2.Exchange.ListRateModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[RateModel] 交換レートモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.exchange.listRateModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListRateModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[RateModel] 交換レートモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
交換レートモデル情報の一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[RateModel] | 交換レートモデルのリスト |
getRateModel
yield return gs2.Exchange.GetRateModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string 交換レートの種類名
Debug.Log(r.Result.Item.Metadata); // string 交換レートの種類のメタデータ
Debug.Log(r.Result.Item.ConsumeActions); // list[ConsumeAction] 消費アクションリスト
Debug.Log(r.Result.Item.AcquireActions); // list[AcquireAction] 入手アクションリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
return client.exchange.getRateModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRateModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string 交換レートの種類名
// r.getResult()->getItem().getMetadata(); // string 交換レートの種類のメタデータ
// r.getResult()->getItem().getConsumeActions(); // list[ConsumeAction] 消費アクションリスト
// r.getResult()->getItem().getAcquireActions(); // list[AcquireAction] 入手アクションリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
交換レートモデル情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 交換レート名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRateModel | 交換レートモデル |
交換
交換
exchange
yield return gs2.Exchange.Exchange(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string 交換レートの種類名
Debug.Log(r.Result.Item.Metadata); // string 交換レートの種類のメタデータ
Debug.Log(r.Result.Item.ConsumeActions); // list[ConsumeAction] 消費アクションリスト
Debug.Log(r.Result.Item.AcquireActions); // list[AcquireAction] 入手アクションリスト
Debug.Log(r.Result.StampSheet); // string 交換処理の実行に使用するスタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レートの種類名
count, // 交換するロット数
config // 設定値(オプション値)
);
return client.exchange.exchange(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncExchangeResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string 交換レートの種類名
// r.getResult()->getItem().getMetadata(); // string 交換レートの種類のメタデータ
// r.getResult()->getItem().getConsumeActions(); // list[ConsumeAction] 消費アクションリスト
// r.getResult()->getItem().getAcquireActions(); // list[AcquireAction] 入手アクションリスト
// r.getResult()->getStampSheet(); // string 交換処理の実行に使用するスタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レートの種類名
count, // 交換するロット数
config // 設定値(オプション値)
);
交換を実行
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 交換レートの種類名 |
count | integer | true | 交換するロット数 |
config | list[Config] | false | 設定値 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRateModel | 交換レートモデル |
stampSheet | string | 交換処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
交換待機
交換待機
EzAwait
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
rateName | string | true | 交換レート名 |
name | string | true | 交換待機の名前 |
exchangedAt | long | true | 作成日時 |
listAwaits
yield return gs2.Exchange.ListAwaits(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Await] 交換待機のリスト
Debug.Log(r.Result.NextPageToken); // string 次のページを取得するためのトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken // データの取得を開始する位置を指定するトークン(オプション値)
);
return client.exchange.listAwaits(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListAwaitsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Await] 交換待機のリスト
// r.getResult()->getNextPageToken(); // string 次のページを取得するためのトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken // データの取得を開始する位置を指定するトークン(オプション値)
);
交換待機情報の一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Await] | 交換待機のリスト |
nextPageToken | string | 次のページを取得するためのトークン |
getAwait
yield return gs2.Exchange.GetAwait(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RateName); // string 交換レート名
Debug.Log(r.Result.Item.Name); // string 交換待機の名前
Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
return client.exchange.getAwait(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetAwaitResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRateName(); // string 交換レート名
// r.getResult()->getItem().getName(); // string 交換待機の名前
// r.getResult()->getItem().getExchangedAt(); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
交換待機情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 交換レート名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzAwait | 交換待機 |
acquire
yield return gs2.Exchange.Acquire(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RateName); // string 交換レート名
Debug.Log(r.Result.Item.Name); // string 交換待機の名前
Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
Debug.Log(r.Result.StampSheet); // string 報酬取得処理の実行に使用するスタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
return client.exchange.acquire(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAcquireResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRateName(); // string 交換レート名
// r.getResult()->getItem().getName(); // string 交換待機の名前
// r.getResult()->getItem().getExchangedAt(); // long 作成日時
// r.getResult()->getStampSheet(); // string 報酬取得処理の実行に使用するスタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
交換待機の報酬を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 交換レート名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzAwait | 交換待機 |
stampSheet | string | 報酬取得処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
skip
yield return gs2.Exchange.Skip(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RateName); // string 交換レート名
Debug.Log(r.Result.Item.Name); // string 交換待機の名前
Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
Debug.Log(r.Result.StampSheet); // string 報酬取得処理の実行に使用するスタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
return client.exchange.skip(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSkipResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRateName(); // string 交換レート名
// r.getResult()->getItem().getName(); // string 交換待機の名前
// r.getResult()->getItem().getExchangedAt(); // long 作成日時
// r.getResult()->getStampSheet(); // string 報酬取得処理の実行に使用するスタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
交換待機を対価を払ってスキップ
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 交換レート名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzAwait | 交換待機 |
stampSheet | string | 報酬取得処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
deleteAwait
yield return gs2.Exchange.DeleteAwait(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RateName); // string 交換レート名
Debug.Log(r.Result.Item.Name); // string 交換待機の名前
Debug.Log(r.Result.Item.ExchangedAt); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
return client.exchange.deleteAwait(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteAwaitResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRateName(); // string 交換レート名
// r.getResult()->getItem().getName(); // string 交換待機の名前
// r.getResult()->getItem().getExchangedAt(); // long 作成日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
rateName, // 交換レート名
);
交換待機情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
rateName | string | true | 交換レート名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzAwait | 交換待機 |
設定値
設定値
EzConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
key | string | false | 名前 |
value | string | false | 値 |
入手アクション
入手アクション
EzAcquireAction
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
action | string | true | スタンプシートで実行するアクションの種類 |
request | string | true | 入手リクエストのJSON |
消費アクション
消費アクション
EzConsumeAction
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
action | string | true | スタンプタスクで実行するアクションの種類 |
request | string | true | 消費リクエストのJSON |
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 | true | ランクアップ閾値 |
listExperienceModels
yield return gs2.Experience.ListExperienceModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[ExperienceModel] 経験値・ランクアップ閾値モデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.experience.listExperienceModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListExperienceModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[ExperienceModel] 経験値・ランクアップ閾値モデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
経験値・ランクアップ閾値モデル情報の一覧を取得
ランクキャップの情報やランクアップ閾値の情報を取得します。 次のランクアップまでに必要な獲得経験値量などをゲーム内で表示したい場合はこのモデルデータを使ってください。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[ExperienceModel] | 経験値・ランクアップ閾値モデルのリスト |
getExperienceModel
yield return gs2.Experience.GetExperienceModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string 経験値の種類名
Debug.Log(r.Result.Item.Metadata); // string 経験値の種類のメタデータ
Debug.Log(r.Result.Item.DefaultExperience); // long 経験値の初期値
Debug.Log(r.Result.Item.DefaultRankCap); // long ランクキャップの初期値
Debug.Log(r.Result.Item.MaxRankCap); // long ランクキャップの最大値
Debug.Log(r.Result.Item.RankThreshold.Metadata); // string ランクアップ閾値のメタデータ
Debug.Log(r.Result.Item.RankThreshold.Values); // list[long] ランクアップ経験値閾値リスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
experienceName, // 経験値の種類名
);
return client.experience.getExperienceModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetExperienceModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string 経験値の種類名
// r.getResult()->getItem().getMetadata(); // string 経験値の種類のメタデータ
// r.getResult()->getItem().getDefaultExperience(); // long 経験値の初期値
// r.getResult()->getItem().getDefaultRankCap(); // long ランクキャップの初期値
// r.getResult()->getItem().getMaxRankCap(); // long ランクキャップの最大値
// r.getResult()->getItem().getRankThreshold().getMetadata(); // string ランクアップ閾値のメタデータ
// r.getResult()->getItem().getRankThreshold().getValues(); // list[long] ランクアップ経験値閾値リスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
experienceName, // 経験値の種類名
);
経験値・ランクアップ閾値モデル情報を取得
経験値の種類名
を指定してランクキャップの情報やランクアップ閾値の情報を取得します。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
experienceName | string | true | 経験値の種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzExperienceModel | 経験値・ランクアップ閾値モデル |
ランクアップ閾値
ランクアップ閾値
ランクアップに必要な経験値テーブルを定義
EzThreshold
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
metadata | string | false | ランクアップ閾値のメタデータ |
values | list[long] | true | ランクアップ経験値閾値リスト |
ステータス
ステータス
獲得経験値・現在のランク・ランクキャップ情報を格納します。
EzStatus
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
experienceName | string | true | 経験値の種類の名前 |
propertyId | string | true | プロパティID |
experienceValue | long | true | 累計獲得経験値 |
rankValue | long | true | 現在のランク |
rankCapValue | long | true | 現在のランクキャップ |
listStatuses
yield return gs2.Experience.ListStatuses(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Status] ステータスのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
experienceName, // 経験値の種類名(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.experience.listStatuses(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListStatusesResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Status] ステータスのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
experienceName, // 経験値の種類名(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
ステータス情報の一覧を取得
経験値の種類名 は省略可能で、指定しなかった場合はゲームプレイヤーに属する全てのステータス情報が取得できます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
experienceName | string | false | 経験値の種類名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Status] | ステータスのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getStatus
yield return gs2.Experience.GetStatus(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.ExperienceName); // string 経験値の種類の名前
Debug.Log(r.Result.Item.PropertyId); // string プロパティID
Debug.Log(r.Result.Item.ExperienceValue); // long 累計獲得経験値
Debug.Log(r.Result.Item.RankValue); // long 現在のランク
Debug.Log(r.Result.Item.RankCapValue); // long 現在のランクキャップ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
experienceName, // 経験値の種類の名前
propertyId, // プロパティID
);
return client.experience.getStatus(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetStatusResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getExperienceName(); // string 経験値の種類の名前
// r.getResult()->getItem().getPropertyId(); // string プロパティID
// r.getResult()->getItem().getExperienceValue(); // long 累計獲得経験値
// r.getResult()->getItem().getRankValue(); // long 現在のランク
// r.getResult()->getItem().getRankCapValue(); // long 現在のランクキャップ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
experienceName, // 経験値の種類の名前
propertyId, // プロパティID
);
経験値の種類
と プロパティID
を指定してステータス情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
experienceName | string | true | 経験値の種類の名前 |
propertyId | string | true | プロパティID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzStatus | ステータス |
GS2-Formation
装備やパーティ編成機能を実現します。
編成情報を記録する フォーム(Form)
と、編成した フォーム
を保存する 保存したフォーム(Mold)
があります。
パーティ編成を例にすると、キャラクターを フォーム
に設定し、パーティを編成します。
編成したパーティ情報を複数記録する場合は 保存したフォーム
を使って実現できます。
保存したフォーム
に保存できる数にはキャパシティを設定でき、キャパシティの値は引き上げることができます。
フォーム
に編成するプロパティはプロパティIDで指定することになりますが、プロパティの正規表現で値を限定することができます。
また、GS2-Inventory のリソースを設定する場合は、GS2-Inventory が発行する 署名付きアイテムセット
を使って編成対象に指定できます。
署名付きアイテムセット
とは、該当のアイテムを所有していることを保証する署名付きプロパティ情報で、こちらを使う場合はクライアントから直接編成することを許します。
この 所有していることを保証する
とは編成時点での保証であり、編成後にプロパティを手放した場合のフォローはありません。
GS2-Inventory でプロパティを消費したり売却したりする場合は、事前に GS2-Formation で編成に使用されていないかの判定はクライアントまたはスクリプトで実装する必要があります。
フォームモデル
フォームモデル
フォームとは複数のプロパティを編成したものです。 キャラクターを編成してパーティに。武器や防具を編成して装備とした場合、『パーティ』や『装備』がフォームに相当します。
1つのフォームは複数のスロットを持ちます。たとえば、キャラクターを編成するためのパーティ用のフォームを用意するとして、 最大5人のキャラクターを編成できる場合、5つのスロットを用意し、各スロットにキャラクターのIDを設定できるようにしておきます。
EzFormModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | フォームの種類名 |
metadata | string | false | フォームの種類のメタデータ |
slots | list[SlotModel] | true | スリットリスト |
フォームの保存領域
フォームの保存領域
フォームで編成した結果を保存する領域を定義します。 たとえば、キャラクターを編成してパーティを編成できる仕様がある場合、キャラクターの属性毎の編成内容をこの領域に保存しておくことで クエストに出現する敵キャラクターの属性に合わせて毎回編成しなくても、保存結果をロードするだけでよくなります。
同一フォーム(パーティの編成)内容を複数保存したい場合も、保存領域マスターは1つ定義すれば対応できます。 また、いくつ保存できるか。というパラメータはプレイヤーごとにキャップの引き上げが出来るようになっています。
EzMoldModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | フォームの保存領域名 |
metadata | string | false | メタデータ |
formModel | FormModel | true | |
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 | true | ユーザーID |
capacity | integer | true | 現在のキャパシティ |
listMolds
yield return gs2.Formation.ListMolds(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Mold] 保存したフォームのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.formation.listMolds(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMoldsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Mold] 保存したフォームのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
保存したフォーム情報の一覧を取得
フォームの保存領域名 は省略可能で、指定しなかった場合はゲームプレイヤーに属する全ての保存したフォーム情報が取得できます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Mold] | 保存したフォームのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getMold
yield return gs2.Formation.GetMold(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.Capacity); // integer 現在のキャパシティ
Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
);
return client.formation.getMold(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetMoldResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string フォームの保存領域の名前
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getCapacity(); // integer 現在のキャパシティ
// r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
// r.getResult()->getMoldModel().getMetadata(); // string メタデータ
// r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
// r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
// r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
// r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
// r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
);
フォームの保存領域
と プロパティID
を指定して保存したフォーム情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
moldName | string | true | フォームの保存領域の名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzMold | 保存したフォーム |
moldModel | EzMoldModel | フォームの保存領域 |
フォーム
フォーム
フォームとは複数のプロパティを編成したものです。 キャラクターを編成してパーティに。武器や防具を編成して装備とした場合、『パーティ』や『装備』がフォームに相当します。
EzForm
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | フォームの保存領域の名前 |
index | integer | true | 保存領域のインデックス |
slots | list[Slot] | true | スロットリスト |
listForms
yield return gs2.Formation.ListForms(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Form] フォームのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.formation.listForms(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListFormsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Form] フォームのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
フォームの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
moldName | string | false | フォームの保存領域の名前 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Form] | フォームのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getForm
yield return gs2.Formation.GetForm(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
Debug.Log(r.Result.Item.Index); // integer 保存領域のインデックス
Debug.Log(r.Result.Item.Slots); // list[Slot] スロットリスト
Debug.Log(r.Result.Mold.Name); // string フォームの保存領域の名前
Debug.Log(r.Result.Mold.UserId); // string ユーザーID
Debug.Log(r.Result.Mold.Capacity); // integer 現在のキャパシティ
Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
Debug.Log(r.Result.FormModel.Name); // string フォームの種類名
Debug.Log(r.Result.FormModel.Metadata); // string フォームの種類のメタデータ
Debug.Log(r.Result.FormModel.Slots); // list[SlotModel] スリットリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
index, // 保存領域のインデックス
);
return client.formation.getForm(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetFormResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string フォームの保存領域の名前
// r.getResult()->getItem().getIndex(); // integer 保存領域のインデックス
// r.getResult()->getItem().getSlots(); // list[Slot] スロットリスト
// r.getResult()->getMold().getName(); // string フォームの保存領域の名前
// r.getResult()->getMold().getUserId(); // string ユーザーID
// r.getResult()->getMold().getCapacity(); // integer 現在のキャパシティ
// r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
// r.getResult()->getMoldModel().getMetadata(); // string メタデータ
// r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
// r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
// r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
// r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
// r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
// r.getResult()->getFormModel().getName(); // string フォームの種類名
// r.getResult()->getFormModel().getMetadata(); // string フォームの種類のメタデータ
// r.getResult()->getFormModel().getSlots(); // list[SlotModel] スリットリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
index, // 保存領域のインデックス
);
フォームを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
moldName | string | true | フォームの保存領域の名前 |
index | integer | true | 保存領域のインデックス |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzForm | フォーム |
mold | EzMold | 保存したフォーム |
moldModel | EzMoldModel | フォームの保存領域 |
formModel | EzFormModel | フォームモデル |
getFormWithSignature
yield return gs2.Formation.GetFormWithSignature(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
Debug.Log(r.Result.Item.Index); // integer 保存領域のインデックス
Debug.Log(r.Result.Item.Slots); // list[Slot] スロットリスト
Debug.Log(r.Result.Body); // string 署名対象の値
Debug.Log(r.Result.Signature); // string 署名
Debug.Log(r.Result.Mold.Name); // string フォームの保存領域の名前
Debug.Log(r.Result.Mold.UserId); // string ユーザーID
Debug.Log(r.Result.Mold.Capacity); // integer 現在のキャパシティ
Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
Debug.Log(r.Result.FormModel.Name); // string フォームの種類名
Debug.Log(r.Result.FormModel.Metadata); // string フォームの種類のメタデータ
Debug.Log(r.Result.FormModel.Slots); // list[SlotModel] スリットリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
index, // 保存領域のインデックス
keyId, // 署名の発行に使用する暗号鍵 のGRN
);
return client.formation.getFormWithSignature(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetFormWithSignatureResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string フォームの保存領域の名前
// r.getResult()->getItem().getIndex(); // integer 保存領域のインデックス
// r.getResult()->getItem().getSlots(); // list[Slot] スロットリスト
// r.getResult()->getBody(); // string 署名対象の値
// r.getResult()->getSignature(); // string 署名
// r.getResult()->getMold().getName(); // string フォームの保存領域の名前
// r.getResult()->getMold().getUserId(); // string ユーザーID
// r.getResult()->getMold().getCapacity(); // integer 現在のキャパシティ
// r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
// r.getResult()->getMoldModel().getMetadata(); // string メタデータ
// r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
// r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
// r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
// r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
// r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
// r.getResult()->getFormModel().getName(); // string フォームの種類名
// r.getResult()->getFormModel().getMetadata(); // string フォームの種類のメタデータ
// r.getResult()->getFormModel().getSlots(); // list[SlotModel] スリットリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
index, // 保存領域のインデックス
keyId, // 署名の発行に使用する暗号鍵 のGRN
);
フォームを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
moldName | string | true | フォームの保存領域の名前 |
index | integer | true | 保存領域のインデックス |
keyId | string | true | 署名の発行に使用する暗号鍵 のGRN |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzForm | フォーム |
body | string | 署名対象の値 |
signature | string | 署名 |
mold | EzMold | 保存したフォーム |
moldModel | EzMoldModel | フォームの保存領域 |
formModel | EzFormModel | フォームモデル |
setForm
yield return gs2.Formation.SetForm(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string フォームの保存領域の名前
Debug.Log(r.Result.Item.Index); // integer 保存領域のインデックス
Debug.Log(r.Result.Item.Slots); // list[Slot] スロットリスト
Debug.Log(r.Result.Mold.Name); // string フォームの保存領域の名前
Debug.Log(r.Result.Mold.UserId); // string ユーザーID
Debug.Log(r.Result.Mold.Capacity); // integer 現在のキャパシティ
Debug.Log(r.Result.MoldModel.Name); // string フォームの保存領域名
Debug.Log(r.Result.MoldModel.Metadata); // string メタデータ
Debug.Log(r.Result.MoldModel.FormModel.Name); // string フォームの種類名
Debug.Log(r.Result.MoldModel.FormModel.Metadata); // string フォームの種類のメタデータ
Debug.Log(r.Result.MoldModel.FormModel.Slots); // list[SlotModel] スリットリスト
Debug.Log(r.Result.MoldModel.InitialMaxCapacity); // integer フォームを保存できる初期キャパシティ
Debug.Log(r.Result.MoldModel.MaxCapacity); // integer フォームを保存できるキャパシティ
Debug.Log(r.Result.FormModel.Name); // string フォームの種類名
Debug.Log(r.Result.FormModel.Metadata); // string フォームの種類のメタデータ
Debug.Log(r.Result.FormModel.Slots); // list[SlotModel] スリットリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
index, // 保存領域のインデックス
slots, // 編成するスロットのリスト
keyId, // 署名の発行に使用した GS2-Key の暗号鍵GRN
);
return client.formation.setForm(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSetFormResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string フォームの保存領域の名前
// r.getResult()->getItem().getIndex(); // integer 保存領域のインデックス
// r.getResult()->getItem().getSlots(); // list[Slot] スロットリスト
// r.getResult()->getMold().getName(); // string フォームの保存領域の名前
// r.getResult()->getMold().getUserId(); // string ユーザーID
// r.getResult()->getMold().getCapacity(); // integer 現在のキャパシティ
// r.getResult()->getMoldModel().getName(); // string フォームの保存領域名
// r.getResult()->getMoldModel().getMetadata(); // string メタデータ
// r.getResult()->getMoldModel().getFormModel().getName(); // string フォームの種類名
// r.getResult()->getMoldModel().getFormModel().getMetadata(); // string フォームの種類のメタデータ
// r.getResult()->getMoldModel().getFormModel().getSlots(); // list[SlotModel] スリットリスト
// r.getResult()->getMoldModel().getInitialMaxCapacity(); // integer フォームを保存できる初期キャパシティ
// r.getResult()->getMoldModel().getMaxCapacity(); // integer フォームを保存できるキャパシティ
// r.getResult()->getFormModel().getName(); // string フォームの種類名
// r.getResult()->getFormModel().getMetadata(); // string フォームの種類のメタデータ
// r.getResult()->getFormModel().getSlots(); // list[SlotModel] スリットリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
moldName, // フォームの保存領域の名前
index, // 保存領域のインデックス
slots, // 編成するスロットのリスト
keyId, // 署名の発行に使用した GS2-Key の暗号鍵GRN
);
フォームを更新
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
moldName | string | true | フォームの保存領域の名前 |
index | integer | true | 保存領域のインデックス |
slots | list[SlotWithSignature] | true | 編成するスロットのリスト |
keyId | string | true | 署名の発行に使用した GS2-Key の暗号鍵GRN |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzForm | フォーム |
mold | EzMold | 保存したフォーム |
moldModel | EzMoldModel | フォームの保存領域 |
formModel | EzFormModel | フォームモデル |
スロット
スロット
フォームに設定するプロパティ
EzSlot
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | スロットモデル名 |
propertyId | string | true | プロパティID |
metadata | string | false | メタデータ |
スロットモデル
スロットモデル
EzSlotModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | スロットモデル名 |
propertyRegex | string | false | プロパティとして設定可能な値の正規表現 |
metadata | string | false | メタデータ |
署名付きスロット
署名付きスロット
フォームに設定する存在証明されたプロパティ
EzSlotWithSignature
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | スロットモデル名 |
propertyType | string | true | プロパティの種類 |
body | string | true | ペイロード |
signature | string | true | プロパティIDのリソースを所有していることを証明する署名 |
metadata | string | false | メタデータ |
入手アクションコンフィグ
入手アクションコンフィグ
EzAcquireActionConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | false | スロット名 |
config | list[Config] | false | スタンプシートに使用するコンフィグ |
設定値
設定値
EzConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
key | string | false | 名前 |
value | string | false | 値 |
入手アクション
入手アクション
EzAcquireAction
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
action | string | true | スタンプシートで実行するアクションの種類 |
request | string | true | 入手リクエストのJSON |
GS2-Friend
ゲーム内の友達関係を実現するときに使用します。
リクエストを出して、承認されて初めて関係の構築されるフレンドと、 相手の承認手続きなしに構築できるフォローがあります。
ゲームプレイヤーのメタデータとしてプロフィール情報を持たせることができます。
プロフィール情報は 公開
フォロワーに公開
フレンドに公開
のスコープがあり、スコープに応じて他プレイヤーに公開されます。
フレンド・フォロワー数の上限はそれぞれ1万人ですが、連携するサービスによっては各サービスのポリシーに従って追加の制限が加わる可能性があります。
プロフィール
プロフィール
プロフィールは 公開
フォロワー向けに公開
フレンド向けに公開
のスコープがあります。
EzProfile
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
publicProfile | string | false | 公開されるプロフィール |
followerProfile | string | false | フォロワー向けに公開されるプロフィール |
friendProfile | string | false | フレンド向けに公開されるプロフィール |
getProfile
yield return gs2.Friend.GetProfile(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
Debug.Log(r.Result.Item.FollowerProfile); // string フォロワー向けに公開されるプロフィール
Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.friend.getProfile(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetProfileResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
// r.getResult()->getItem().getFollowerProfile(); // string フォロワー向けに公開されるプロフィール
// r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
自分のプロフィールを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzProfile | プロフィール |
updateProfile
yield return gs2.Friend.UpdateProfile(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
Debug.Log(r.Result.Item.FollowerProfile); // string フォロワー向けに公開されるプロフィール
Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
publicProfile, // 公開されるプロフィール(オプション値)
followerProfile, // フォロワー向けに公開されるプロフィール(オプション値)
friendProfile // フレンド向けに公開されるプロフィール(オプション値)
);
return client.friend.updateProfile(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateProfileResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
// r.getResult()->getItem().getFollowerProfile(); // string フォロワー向けに公開されるプロフィール
// r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
publicProfile, // 公開されるプロフィール(オプション値)
followerProfile, // フォロワー向けに公開されるプロフィール(オプション値)
friendProfile // フレンド向けに公開されるプロフィール(オプション値)
);
自分のプロフィールを更新
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
publicProfile | string | false | 公開されるプロフィール |
followerProfile | string | false | フォロワー向けに公開されるプロフィール |
friendProfile | string | false | フレンド向けに公開されるプロフィール |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzProfile | 更新したプロフィール |
getPublicProfile
yield return gs2.Friend.GetPublicProfile(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
userId, // ユーザーID
);
return client.friend.getPublicProfile(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetPublicProfileResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
userId, // ユーザーID
);
他人の公開プロフィールを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
userId | string | true | ユーザーID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzPublicProfile | 公開プロフィール |
フォロー
フォロー
各ゲームプレイヤーが誰をフォローしているかを管理します。
describeFollowUsers
yield return gs2.Friend.DescribeFollowUsers(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[FollowUser] フォローしているユーザーのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
withProfile, // プロフィールも一緒に取得するか
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.friend.describeFollowUsers(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeFollowUsersResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[FollowUser] フォローしているユーザーのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
withProfile, // プロフィールも一緒に取得するか
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
他プレイヤーをフォローする
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
withProfile | boolean | true | プロフィールも一緒に取得するか |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[FollowUser] | フォローしているユーザーのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
follow
yield return gs2.Friend.Follow(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // フォローされるユーザID
);
return client.friend.follow(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncFollowResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // フォローされるユーザID
);
他プレイヤーをフォローする
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | フォローされるユーザID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFollowUser | フォローしたユーザ |
unfollow
yield return gs2.Friend.Unfollow(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // フォローされているユーザID
);
return client.friend.unfollow(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnfollowResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // フォローされているユーザID
);
フォローしている相手をアンフォローする
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | フォローされているユーザID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFollowUser | アンフォローしたユーザ |
フレンド
フレンド
describeFriends
yield return gs2.Friend.DescribeFriends(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[FriendUser] フレンドのユーザーのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
withProfile, // プロフィールも一緒に取得するか
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.friend.describeFriends(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeFriendsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[FriendUser] フレンドのユーザーのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
withProfile, // プロフィールも一緒に取得するか
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
フレンドの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
withProfile | boolean | true | プロフィールも一緒に取得するか |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[FriendUser] | フレンドのユーザーのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getFriend
yield return gs2.Friend.GetFriend(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // ユーザーID
withProfile, // プロフィールも一緒に取得するか
);
return client.friend.getFriend(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetFriendResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
// r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // ユーザーID
withProfile, // プロフィールも一緒に取得するか
);
フレンドを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | ユーザーID |
withProfile | boolean | true | プロフィールも一緒に取得するか |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFriendUser | フレンドのユーザー |
deleteFriend
yield return gs2.Friend.DeleteFriend(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.PublicProfile); // string 公開されるプロフィール
Debug.Log(r.Result.Item.FriendProfile); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // ユーザーID
);
return client.friend.deleteFriend(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteFriendResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getPublicProfile(); // string 公開されるプロフィール
// r.getResult()->getItem().getFriendProfile(); // string フレンド向けに公開されるプロフィール
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // ユーザーID
);
フレンドを削除
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | ユーザーID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFriendUser | フレンドのユーザー |
フレンドリクエストの受信ボックス
フレンドリクエストの受信ボックス
describeSendRequests
yield return gs2.Friend.DescribeSendRequests(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[FriendRequest] フレンドリクエストのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.friend.describeSendRequests(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeSendRequestsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[FriendRequest] フレンドリクエストのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
送信したフレンドリクエストの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[FriendRequest] | フレンドリクエストのリスト |
sendRequest
yield return gs2.Friend.SendRequest(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // リクエストの送信先ユーザID
);
return client.friend.sendRequest(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSendRequestResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getTargetUserId(); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // リクエストの送信先ユーザID
);
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | リクエストの送信先ユーザID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFriendRequest | 送信したフレンドリクエスト |
deleteRequest
yield return gs2.Friend.DeleteRequest(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // リクエストの送信先ユーザID
);
return client.friend.deleteRequest(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteRequestResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getTargetUserId(); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // リクエストの送信先ユーザID
);
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | リクエストの送信先ユーザID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFriendRequest | 削除したフレンドリクエスト |
フレンドリクエストの受信ボックス
フレンドリクエストの受信ボックス
describeReceiveRequests
yield return gs2.Friend.DescribeReceiveRequests(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[FriendRequest] フレンドリクエストのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.friend.describeReceiveRequests(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeReceiveRequestsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[FriendRequest] フレンドリクエストのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
受信したフレンドリクエスト一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[FriendRequest] | フレンドリクエストのリスト |
accept
yield return gs2.Friend.Accept(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
fromUserId, // フレンドリクエストを送信したユーザID
);
return client.friend.accept(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncAcceptResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getTargetUserId(); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
fromUserId, // フレンドリクエストを送信したユーザID
);
フレンドリクエストを承認
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
fromUserId | string | true | フレンドリクエストを送信したユーザID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFriendRequest | 承諾したフレンドリクエスト |
reject
yield return gs2.Friend.Reject(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.TargetUserId); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
fromUserId, // フレンドリクエストを送信したユーザID
);
return client.friend.reject(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncRejectResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getTargetUserId(); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
fromUserId, // フレンドリクエストを送信したユーザID
);
フレンドリクエストを拒否
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
fromUserId | string | true | フレンドリクエストを送信したユーザID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzFriendRequest | 拒否したフレンドリクエスト |
ブラックリスト
ブラックリスト
EzBlackList
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
targetUserIds | list[string] | false | ブラックリストのユーザーIDリスト |
getBlackList
yield return gs2.Friend.GetBlackList(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[string] ブラックリストに登録されたユーザIDリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.friend.getBlackList(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetBlackListResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[string] ブラックリストに登録されたユーザIDリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
ブラックリストを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[string] | ブラックリストに登録されたユーザIDリスト |
registerBlackList
yield return gs2.Friend.RegisterBlackList(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.TargetUserIds); // list[string] ブラックリストのユーザーIDリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // None
);
return client.friend.registerBlackList(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncRegisterBlackListResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getTargetUserIds(); // list[string] ブラックリストのユーザーIDリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // None
);
ブラックリストにユーザを登録
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | None |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzBlackList | ブラックリスト |
unregisterBlackList
yield return gs2.Friend.UnregisterBlackList(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.TargetUserIds); // list[string] ブラックリストのユーザーIDリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // None
);
return client.friend.unregisterBlackList(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnregisterBlackListResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getTargetUserIds(); // list[string] ブラックリストのユーザーIDリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
targetUserId, // None
);
ブラックリストからユーザを削除
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
targetUserId | string | true | None |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzBlackList | ブラックリスト |
フォローしているユーザー
フォローしているユーザー
EzFollowUser
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
フレンドのユーザー
フレンドのユーザー
EzFriendUser
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
publicProfile | string | false | 公開されるプロフィール |
friendProfile | string | false | フレンド向けに公開されるプロフィール |
フレンドリクエスト
フレンドリクエスト
EzFriendRequest
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
targetUserId | string | true | ユーザーID |
公開プロフィール
公開プロフィール
EzPublicProfile
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
publicProfile | string | false | 公開されるプロフィール |
GS2-Gateway
GS2-Gateway は WebSocket
を経由して GS2 にアクセスするためのプロキシ機能を提供します。
GS2-Gateway を使用して GS2 のサーバを利用することで、常時接続しながら通信できるようになります。これによって、サーバーとの通信速度が改善することが期待できます。
また、常時接続できることから、 サーバーサイドからのプッシュ通知に対応
できます。
このプッシュ通知機能があると GS2-Mission で ミッションのタスク
を達成したときや、 GS2-Matchmaking で ギャザリング
の参加者の増減があった時などに通知を受け取ることができるようになります。
プッシュ通知対象のデバイスがオフラインだった場合、 Firebase
(https://firebase.google.com/) を使用したモバイルプッシュ通知に転送する仕組みも提供します。
この機能を使用すれば、マッチメイキングが完了したときにプレイヤーがオフラインだった場合はモバイルプッシュ通知を出してゲームに戻ってくるようプレイヤーを誘導することができます。
GS2-Gateway で常時接続用のセッションを構築する際にゲームプレイヤーの識別を行えるよう GS2-Auth で発行した アクセストークン
で認証処理を行うことになりますが、
すでに同一ユーザのセッションが存在する場合は、アクセスを拒否することができます。
Websocketセッション
Websocketセッション
EzWebSocketSession
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
connectionId | string | true | コネクションID |
namespaceName | string | false | ネームスペース名 |
userId | string | false | ユーザーID |
setUserId
yield return gs2.Gateway.SetUserId(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.ConnectionId); // string コネクションID
Debug.Log(r.Result.Item.NamespaceName); // string ネームスペース名
Debug.Log(r.Result.Item.UserId); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
allowConcurrentAccess, // 同時に異なるクライアントからの接続を許容するか
);
return client.gateway.setUserId(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncSetUserIdResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getConnectionId(); // string コネクションID
// r.getResult()->getItem().getNamespaceName(); // string ネームスペース名
// r.getResult()->getItem().getUserId(); // string ユーザーID
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
allowConcurrentAccess, // 同時に異なるクライアントからの接続を許容するか
);
サーバからプッシュ通知を受けるためのユーザーIDを設定
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
allowConcurrentAccess | boolean | true | 同時に異なるクライアントからの接続を許容するか |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzWebSocketSession | 更新したWebsocketセッション |
GS2-Inbox
プレゼントつきのメッセージ機能を実現します。
送信するメッセージには送信先と内容を個別に指定することができ、また報酬を添付することができます。 受信したメッセージはメッセージボックスに格納されて既読状態が管理され、メッセージを初めて読んだときだけ報酬を受け取れるようにすることが可能です。
メッセージボックスは、作成した ネームスペース
ごとに、各ゲームプレイヤーに対して1つ提供されます。
1つのメッセージボックスには複数のメッセージを格納することができます。
メッセージはクエストやミッションの報酬として送信できるほか、所持品やスタミナの管理において、上限を超過して入手できなかった分を転送するのにも利用できます。 また、まとまった数の送信先にプレゼントを届けたい場合などには、 GS2-SDK を利用してバッチ処理でメッセージを送信することができます。 メンテナンスのお詫びなどの全ゲームプレイヤーに一斉送信する通知をグローバルメッセージと呼び、マネージメントコンソールかGS2-SDKから作成することができます。
メッセージ
メッセージ
プレゼントボックスに届いたメッセージデータ。 メッセージの保存期間は最長12ヶ月の制限があります。
EzMessage
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
messageId | string | true | メッセージ |
name | string | false | メッセージID |
metadata | string | true | メッセージの内容に相当するメタデータ |
isRead | boolean | true | 既読状態 |
readAcquireActions | list[AcquireAction] | false | 開封時に実行する入手アクション |
receivedAt | long | true | 作成日時 |
readAt | long | true | 最終更新日時 |
expiresAt | long | false | メッセージの有効期限 |
list
yield return gs2.Inbox.List(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Message] メッセージのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.inbox.list(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Message] メッセージのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
プレゼントボックス に届いているメッセージの一覧を取得
メッセージは最新のメッセージから順番に取得できます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Message] | メッセージのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
receiveGlobalMessage
yield return gs2.Inbox.ReceiveGlobalMessage(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item); // list[Message] 受信したメッセージ一覧
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.inbox.receiveGlobalMessage(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncReceiveGlobalMessageResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem(); // list[Message] 受信したメッセージ一覧
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
グローバルメッセージを受信する
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | list[Message] | 受信したメッセージ一覧 |
read
yield return gs2.Inbox.Read(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.MessageId); // string メッセージ
Debug.Log(r.Result.Item.Name); // string メッセージID
Debug.Log(r.Result.Item.Metadata); // string メッセージの内容に相当するメタデータ
Debug.Log(r.Result.Item.IsRead); // boolean 既読状態
Debug.Log(r.Result.Item.ReadAcquireActions); // list[AcquireAction] 開封時に実行する入手アクション
Debug.Log(r.Result.Item.ReceivedAt); // long 作成日時
Debug.Log(r.Result.Item.ReadAt); // long 最終更新日時
Debug.Log(r.Result.Item.ExpiresAt); // long メッセージの有効期限
Debug.Log(r.Result.StampSheet); // string スタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
messageName // メッセージID(オプション値)
);
return client.inbox.read(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncReadResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getMessageId(); // string メッセージ
// r.getResult()->getItem().getName(); // string メッセージID
// r.getResult()->getItem().getMetadata(); // string メッセージの内容に相当するメタデータ
// r.getResult()->getItem().getIsRead(); // boolean 既読状態
// r.getResult()->getItem().getReadAcquireActions(); // list[AcquireAction] 開封時に実行する入手アクション
// r.getResult()->getItem().getReceivedAt(); // long 作成日時
// r.getResult()->getItem().getReadAt(); // long 最終更新日時
// r.getResult()->getItem().getExpiresAt(); // long メッセージの有効期限
// r.getResult()->getStampSheet(); // string スタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
messageName // メッセージID(オプション値)
);
メッセージを既読にする
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
messageName | string | false | メッセージID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzMessage | メッセージ |
stampSheet | string | スタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
delete
yield return gs2.Inbox.Delete(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
messageName, // メッセージID
);
return client.inbox.delete(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDeleteResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
messageName, // メッセージID
);
メッセージを削除する
プレゼントボックスの設定でメッセージを開封したときに自動的に削除するオプションを付けていない場合は、このAPIを使用して明示的にメッセージを削除する必要があります。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
messageName | string | true | メッセージID |
- リザルト
パラメータ | データ型 | 説明 |
---|
設定値
設定値
EzConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
key | string | false | 名前 |
value | string | false | 値 |
入手アクション
入手アクション
EzAcquireAction
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
action | string | true | スタンプシートで実行するアクションの種類 |
request | string | true | 入手リクエストのJSON |
GS2-Inventory
ゲーム内で使用する所持品の管理をサーバサイドで行いたい場合に使用できます。
所持品の管理をサーバサイドで行う最大の理由は不正行為の対策です。 セーブデータで所持品の数量を管理してしまうと、セーブデータの改ざんによって容易に所持品の増殖が行えてしまいます。 サーバサイドで管理することで、このような不正行為を行えなくすることができます。
GS2-Inventory では様々な種類の所持品を管理できます。 例えば、ガチャチケットやスタミナドリンクのような使用すると無くなってしまうコンテンツ。 キャラクターや、ゲーム内通貨などの資産。 強化素材や進化素材といった素材。などに対応します。
所持品を管理するためには2つのマスターデータを登録しておく必要があります。
- インベントリモデル
- アイテムモデル
インベントリモデル
は所持品枠に関する情報を定義します。
インベントリモデル
では所持品枠の初期容量や最大容量の設定ができます。
アイテムモデル
はインベントごとに設定できるマスターデータであり、インベントリに格納できるアイテムの種類を定義します。
アイテムモデル
ではインベントリ1枠でアイテムをスタックできる最大数量などを設定できます。
GS2のマスターデータとしてはアイテムの効能や用途を設定する必要はありません。
ですが、ゲーム内から使用できる 128
バイトと小さいデータですが、任意のデータを持たせることもできます。
アイテムを付与する際にはアイテムの有効期限を設定できます。 有効期限が切れたアイテムは自動的に削除されます。
アイテムを使用する際には明示的に有効期限を指定して消費することもできますが、 有効期限を指定しなければ、同一のアイテムの中で最も有効期限の近いアイテムから消費されます。
インベントリモデル
インベントリモデル
所持品を入れるカバンのような存在。 何種類のアイテムを入れられるか、キャパシティを決めることができます。 キャパシティは拡張が可能です。
EzInventoryModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | インベントリの種類名 |
metadata | string | false | インベントリの種類のメタデータ |
initialCapacity | integer | true | インベントリの初期サイズ |
maxCapacity | integer | true | インベントリの最大サイズ |
listInventoryModels
yield return gs2.Inventory.ListInventoryModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[InventoryModel] インベントリモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.inventory.listInventoryModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListInventoryModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[InventoryModel] インベントリモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
インベントリモデルの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[InventoryModel] | インベントリモデルのリスト |
getInventoryModel
yield return gs2.Inventory.GetInventoryModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string インベントリの種類名
Debug.Log(r.Result.Item.Metadata); // string インベントリの種類のメタデータ
Debug.Log(r.Result.Item.InitialCapacity); // integer インベントリの初期サイズ
Debug.Log(r.Result.Item.MaxCapacity); // integer インベントリの最大サイズ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
);
return client.inventory.getInventoryModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetInventoryModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string インベントリの種類名
// r.getResult()->getItem().getMetadata(); // string インベントリの種類のメタデータ
// r.getResult()->getItem().getInitialCapacity(); // integer インベントリの初期サイズ
// r.getResult()->getItem().getMaxCapacity(); // integer インベントリの最大サイズ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
);
インベントリ名を指定してインベントリモデルを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzInventoryModel | インベントリモデル |
アイテムモデル
アイテムモデル
アイテムの種類について定義したデータ。 アイテムのメタデータをはじめとして、最大所持可能数や表示順番を保持。
EzItemModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | アイテムモデルの種類名 |
metadata | string | false | アイテムモデルの種類のメタデータ |
stackingLimit | long | true | スタック可能な最大数量 |
allowMultipleStacks | boolean | true | スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか |
sortValue | integer | true | 表示順番 |
listItemModels
yield return gs2.Inventory.ListItemModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[ItemModel] アイテムモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
);
return client.inventory.listItemModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListItemModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[ItemModel] アイテムモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
);
インベントリ名を指定してアイテムモデルの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[ItemModel] | アイテムモデルのリスト |
getItemModel
yield return gs2.Inventory.GetItemModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string アイテムモデルの種類名
Debug.Log(r.Result.Item.Metadata); // string アイテムモデルの種類のメタデータ
Debug.Log(r.Result.Item.StackingLimit); // long スタック可能な最大数量
Debug.Log(r.Result.Item.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
Debug.Log(r.Result.Item.SortValue); // integer 表示順番
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
itemName, // アイテムモデルの種類名
);
return client.inventory.getItemModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetItemModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string アイテムモデルの種類名
// r.getResult()->getItem().getMetadata(); // string アイテムモデルの種類のメタデータ
// r.getResult()->getItem().getStackingLimit(); // long スタック可能な最大数量
// r.getResult()->getItem().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
// r.getResult()->getItem().getSortValue(); // integer 表示順番
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
itemName, // アイテムモデルの種類名
);
インベントリ名とアイテム名を指定してアイテムモデルを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの種類名 |
itemName | string | true | アイテムモデルの種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzItemModel |
インベントリ
インベントリ
所持品を入れるカバンのような存在。 ゲームプレイヤーの持っているインベントリのサイズなどの情報を記録。
EzInventory
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
inventoryId | string | true | インベントリ |
inventoryName | string | true | インベントリモデル名 |
currentInventoryCapacityUsage | integer | true | 現在のインベントリのキャパシティ使用量 |
currentInventoryMaxCapacity | integer | true | 現在のインベントリの最大キャパシティ |
listInventories
yield return gs2.Inventory.ListInventories(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Inventory] インベントリのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.inventory.listInventories(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListInventoriesResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Inventory] インベントリのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
インベントリの一覧を取得
ゲームプレイヤーに紐付いたインベントリの一覧を取得します。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Inventory] | インベントリのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getInventory
yield return gs2.Inventory.GetInventory(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.InventoryId); // string インベントリ
Debug.Log(r.Result.Item.InventoryName); // string インベントリモデル名
Debug.Log(r.Result.Item.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
Debug.Log(r.Result.Item.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
);
return client.inventory.getInventory(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetInventoryResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getInventoryId(); // string インベントリ
// r.getResult()->getItem().getInventoryName(); // string インベントリモデル名
// r.getResult()->getItem().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
// r.getResult()->getItem().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
);
インベントリ名を指定してインベントリの情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzInventory | インベントリ |
有効期限ごとのアイテム所持数量
有効期限ごとのアイテム所持数量
同一アイテムの中で異なる有効期限ごとに所持数量を格納したデータ
EzItemSet
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
itemSetId | string | true | 有効期限ごとのアイテム所持数量 |
name | string | true | アイテムセットを識別する名前 |
inventoryName | string | true | インベントリの名前 |
itemName | string | true | アイテムマスターの名前 |
count | long | true | 所持数量 |
sortValue | integer | true | 表示順番 |
expiresAt | long | true | 有効期限 |
listItems
yield return gs2.Inventory.ListItems(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[ItemSet] 有効期限ごとのアイテム所持数量のリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.inventory.listItems(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListItemsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[ItemSet] 有効期限ごとのアイテム所持数量のリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
指定したインベントリ内の所有しているアイテム一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの種類名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[ItemSet] | 有効期限ごとのアイテム所持数量のリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getItem
yield return gs2.Inventory.GetItem(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[ItemSet] 有効期限毎の{model_name}
Debug.Log(r.Result.ItemModel.Name); // string アイテムモデルの種類名
Debug.Log(r.Result.ItemModel.Metadata); // string アイテムモデルの種類のメタデータ
Debug.Log(r.Result.ItemModel.StackingLimit); // long スタック可能な最大数量
Debug.Log(r.Result.ItemModel.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
Debug.Log(r.Result.ItemModel.SortValue); // integer 表示順番
Debug.Log(r.Result.Inventory.InventoryId); // string インベントリ
Debug.Log(r.Result.Inventory.InventoryName); // string インベントリモデル名
Debug.Log(r.Result.Inventory.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
Debug.Log(r.Result.Inventory.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
itemName, // アイテムモデルの種類名
);
return client.inventory.getItem(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetItemResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[ItemSet] 有効期限毎の{model_name}
// r.getResult()->getItemModel().getName(); // string アイテムモデルの種類名
// r.getResult()->getItemModel().getMetadata(); // string アイテムモデルの種類のメタデータ
// r.getResult()->getItemModel().getStackingLimit(); // long スタック可能な最大数量
// r.getResult()->getItemModel().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
// r.getResult()->getItemModel().getSortValue(); // integer 表示順番
// r.getResult()->getInventory().getInventoryId(); // string インベントリ
// r.getResult()->getInventory().getInventoryName(); // string インベントリモデル名
// r.getResult()->getInventory().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
// r.getResult()->getInventory().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
itemName, // アイテムモデルの種類名
);
インベントリ名とアイテム名を指定してアイテムを取得
アイテムは複数のスタックに分割されて応答されることがあります。 また、有効期限の異なるアイテムは、必ず別のスタックになります。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの種類名 |
itemName | string | true | アイテムモデルの種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[ItemSet] | 有効期限毎の{model_name} |
itemModel | EzItemModel | アイテムモデル |
inventory | EzInventory | インベントリ |
getItemWithSignature
yield return gs2.Inventory.GetItemWithSignature(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[ItemSet] 有効期限毎の{model_name}
Debug.Log(r.Result.ItemModel.Name); // string アイテムモデルの種類名
Debug.Log(r.Result.ItemModel.Metadata); // string アイテムモデルの種類のメタデータ
Debug.Log(r.Result.ItemModel.StackingLimit); // long スタック可能な最大数量
Debug.Log(r.Result.ItemModel.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
Debug.Log(r.Result.ItemModel.SortValue); // integer 表示順番
Debug.Log(r.Result.Inventory.InventoryId); // string インベントリ
Debug.Log(r.Result.Inventory.InventoryName); // string インベントリモデル名
Debug.Log(r.Result.Inventory.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
Debug.Log(r.Result.Inventory.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
Debug.Log(r.Result.Body); // string 署名対象のアイテムセット情報
Debug.Log(r.Result.Signature); // string 署名
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
itemName, // アイテムモデルの種類名
keyId, // 署名の発行に使用する暗号鍵 のGRN
itemSetName // アイテムセットを識別する名前(オプション値)
);
return client.inventory.getItemWithSignature(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetItemWithSignatureResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[ItemSet] 有効期限毎の{model_name}
// r.getResult()->getItemModel().getName(); // string アイテムモデルの種類名
// r.getResult()->getItemModel().getMetadata(); // string アイテムモデルの種類のメタデータ
// r.getResult()->getItemModel().getStackingLimit(); // long スタック可能な最大数量
// r.getResult()->getItemModel().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
// r.getResult()->getItemModel().getSortValue(); // integer 表示順番
// r.getResult()->getInventory().getInventoryId(); // string インベントリ
// r.getResult()->getInventory().getInventoryName(); // string インベントリモデル名
// r.getResult()->getInventory().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
// r.getResult()->getInventory().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
// r.getResult()->getBody(); // string 署名対象のアイテムセット情報
// r.getResult()->getSignature(); // string 署名
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの種類名
itemName, // アイテムモデルの種類名
keyId, // 署名の発行に使用する暗号鍵 のGRN
itemSetName // アイテムセットを識別する名前(オプション値)
);
インベントリ名とアイテム名を指定して署名付きアイテムを取得
このAPIによって、APIを呼び出した瞬間に該当アイテムを所有していることを証明することができる
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの種類名 |
itemName | string | true | アイテムモデルの種類名 |
itemSetName | string | false | アイテムセットを識別する名前 |
keyId | string | true | 署名の発行に使用する暗号鍵 のGRN |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[ItemSet] | 有効期限毎の{model_name} |
itemModel | EzItemModel | アイテムモデル |
inventory | EzInventory | インベントリ |
body | string | 署名対象のアイテムセット情報 |
signature | string | 署名 |
consume
yield return gs2.Inventory.Consume(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[ItemSet] 消費後の有効期限ごとのアイテム所持数量のリスト
Debug.Log(r.Result.ItemModel.Name); // string アイテムモデルの種類名
Debug.Log(r.Result.ItemModel.Metadata); // string アイテムモデルの種類のメタデータ
Debug.Log(r.Result.ItemModel.StackingLimit); // long スタック可能な最大数量
Debug.Log(r.Result.ItemModel.AllowMultipleStacks); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
Debug.Log(r.Result.ItemModel.SortValue); // integer 表示順番
Debug.Log(r.Result.Inventory.InventoryId); // string インベントリ
Debug.Log(r.Result.Inventory.InventoryName); // string インベントリモデル名
Debug.Log(r.Result.Inventory.CurrentInventoryCapacityUsage); // integer 現在のインベントリのキャパシティ使用量
Debug.Log(r.Result.Inventory.CurrentInventoryMaxCapacity); // integer 現在のインベントリの最大キャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの名前
itemName, // アイテムマスターの名前
consumeCount, // 消費する量
itemSetName // アイテムセットを識別する名前(オプション値)
);
return client.inventory.consume(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncConsumeResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[ItemSet] 消費後の有効期限ごとのアイテム所持数量のリスト
// r.getResult()->getItemModel().getName(); // string アイテムモデルの種類名
// r.getResult()->getItemModel().getMetadata(); // string アイテムモデルの種類のメタデータ
// r.getResult()->getItemModel().getStackingLimit(); // long スタック可能な最大数量
// r.getResult()->getItemModel().getAllowMultipleStacks(); // boolean スタック可能な最大数量を超えた時複数枠にアイテムを保管することを許すか
// r.getResult()->getItemModel().getSortValue(); // integer 表示順番
// r.getResult()->getInventory().getInventoryId(); // string インベントリ
// r.getResult()->getInventory().getInventoryName(); // string インベントリモデル名
// r.getResult()->getInventory().getCurrentInventoryCapacityUsage(); // integer 現在のインベントリのキャパシティ使用量
// r.getResult()->getInventory().getCurrentInventoryMaxCapacity(); // integer 現在のインベントリの最大キャパシティ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
inventoryName, // インベントリの名前
itemName, // アイテムマスターの名前
consumeCount, // 消費する量
itemSetName // アイテムセットを識別する名前(オプション値)
);
アイテムを消費
ゲーム内からアイテムを消費したい場合に使用します。
GS2のシステムと連携してアイテムの増減を行う場合はこのAPIを使用することはありません。 なぜなら、商品を購入するためや、クエストに参加するために必要な対価の場合は GS2-Showcase や GS2-Quest 上で対価を設定し、 商品の購入時やクエスト参加時に自動的に対価としてアイテムやその他のリソースが消費されるためです。
そのため、このAPIはGS2を介さない要素のためにアイテムを消費する場合に使用してください。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
inventoryName | string | true | インベントリの名前 |
itemName | string | true | アイテムマスターの名前 |
consumeCount | long | true | 消費する量 |
itemSetName | string | false | アイテムセットを識別する名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[ItemSet] | 消費後の有効期限ごとのアイテム所持数量のリスト |
itemModel | EzItemModel | アイテムモデル |
inventory | EzInventory | インベントリ |
GS2-JobQueue
非同期処理を処理するためのジョブキューに関する処理を提供します。
ネームスペースごとにゲームプレイヤー1人に対して1つのジョブキューが提供されます。 GS2 内の各種処理は結果をジョブキューにはジョブを登録する形で処理が遅延処理されることがあります。 たとえば、ゲーム内ストアで商品を購入した時や、クエストをクリアしたときの報酬付与はジョブキューを経由して付与されます。
ジョブキューのジョブはFIFO(先入れ先出し)で処理されることが保証されています。 ジョブキューに登録されたジョブにはリトライ機能が実装されており、 例えばクエスト機能のサーバは正常に稼働しているにもかからわず、所持品管理のサーバが障害によって停止している場合も クエスト自体は遊ぶことができ、所持品の付与は所持品管理サーバが復旧後に実行できる。というような形で高可用性を実現するための仕組みです。
ジョブキューに新しいジョブが登録されたことを GS2-Gateway の提供するサーバプッシュ機能を使用して受け取ることができます。 ジョブキューを実行した際にはジョブキューが空になったかを応答値から判断できるようになっていますので、プッシュ通知を受け取ったらジョブをキューの終端まで実行する。というサイクルで処理を進めることができます。
ジョブ
ジョブ
ジョブには実行する GS2-Script とその引数、リトライ回数が記録されています。
EzJob
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
jobId | string | true | ジョブ |
scriptId | string | true | ジョブの実行に使用するスクリプト のGRN |
args | string | true | 引数 |
currentRetryCount | integer | true | 現在のリトライ回数 |
maxTryCount | integer | true | 最大試行回数 |
run
yield return gs2.JobQueue.Run(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.JobId); // string ジョブ
Debug.Log(r.Result.Item.ScriptId); // string ジョブの実行に使用するスクリプト のGRN
Debug.Log(r.Result.Item.Args); // string 引数
Debug.Log(r.Result.Item.CurrentRetryCount); // integer 現在のリトライ回数
Debug.Log(r.Result.Item.MaxTryCount); // integer 最大試行回数
Debug.Log(r.Result.Result.TryNumber); // integer 試行回数
Debug.Log(r.Result.Result.StatusCode); // integer ステータスコード
Debug.Log(r.Result.Result.Result); // string レスポンスの内容
Debug.Log(r.Result.Result.TryAt); // long 実行日時
Debug.Log(r.Result.IsLastJob); // boolean None
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.jobQueue.run(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncRunResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getJobId(); // string ジョブ
// r.getResult()->getItem().getScriptId(); // string ジョブの実行に使用するスクリプト のGRN
// r.getResult()->getItem().getArgs(); // string 引数
// r.getResult()->getItem().getCurrentRetryCount(); // integer 現在のリトライ回数
// r.getResult()->getItem().getMaxTryCount(); // integer 最大試行回数
// r.getResult()->getResult().getTryNumber(); // integer 試行回数
// r.getResult()->getResult().getStatusCode(); // integer ステータスコード
// r.getResult()->getResult().getResult(); // string レスポンスの内容
// r.getResult()->getResult().getTryAt(); // long 実行日時
// r.getResult()->getIsLastJob(); // boolean None
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
タスクキューのジョブを実行します。
タスクキューのプッシュ通知設定をすることでタスクキューに新しくジョブが追加されたときにプッシュ通知を受けることができます。
定期的にこのAPIを呼び出すか、プッシュ通知をトリガーしてこのAPIを呼び出してください。
isLastJob
が false を返している間は繰り返し実行してください。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzJob | ジョブ |
result | EzJobResultBody | ジョブの実行結果 |
isLastJob | boolean |
ジョブ
ジョブ
EzJobEntry
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
scriptId | string | true | スクリプト のGRN |
args | string | true | 引数 |
maxTryCount | integer | true | 最大試行回数 |
ジョブの実行結果
ジョブの実行結果
ジョブとして実行した GS2-Script の実行結果
EzJobResultBody
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
tryNumber | integer | true | 試行回数 |
statusCode | integer | true | ステータスコード |
result | string | true | レスポンスの内容 |
tryAt | long | true | 実行日時 |
GS2-Limit
回数制限に関する機能を実装するときに使用します。 回数制限に使用するカウンターの操作や管理をサーバで行うことで、不正行為を防ぐことができます。
GS2 では、クエストの挑戦や商品の購入など、様々な箇所で回数制限を実装できるようになっています。 また、カウンターにはリセットタイミングを設定でき、これによって、毎日1回だけ挑戦できるクエストや、毎週1回だけ購入できる商品などを実現できます。
カウンター
カウンター
EzCounter
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
counterId | string | true | カウンター |
name | string | true | カウンターの名前 |
count | integer | true | カウント値 |
createdAt | long | true | 作成日時 |
updatedAt | long | true | 最終更新日時 |
listCounters
yield return gs2.Limit.ListCounters(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Counter] カウンターのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類の名前(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.limit.listCounters(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCountersResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Counter] カウンターのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類の名前(オプション値)
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
ゲームプレイヤーに紐づく回数制限カウンターの一覧を取得
回数制限名は省略可能です。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
limitName | string | false | 回数制限の種類の名前 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Counter] | カウンターのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getCounter
yield return gs2.Limit.GetCounter(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.CounterId); // string カウンター
Debug.Log(r.Result.Item.Name); // string カウンターの名前
Debug.Log(r.Result.Item.Count); // integer カウント値
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類の名前
counterName, // カウンターの名前
);
return client.limit.getCounter(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCounterResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getCounterId(); // string カウンター
// r.getResult()->getItem().getName(); // string カウンターの名前
// r.getResult()->getItem().getCount(); // integer カウント値
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類の名前
counterName, // カウンターの名前
);
回数制限名とカウンター名を指定してゲームプレイヤーに紐づく回数制限カウンターを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
limitName | string | true | 回数制限の種類の名前 |
counterName | string | true | カウンターの名前 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzCounter | カウンター |
countUp
yield return gs2.Limit.CountUp(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.CounterId); // string カウンター
Debug.Log(r.Result.Item.Name); // string カウンターの名前
Debug.Log(r.Result.Item.Count); // integer カウント値
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類の名前
counterName, // カウンターの名前
countUpValue, // カウントアップする量(オプション値)
maxValue // カウントアップを許容する最大値 を入力してください(オプション値)
);
return client.limit.countUp(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCountUpResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getCounterId(); // string カウンター
// r.getResult()->getItem().getName(); // string カウンターの名前
// r.getResult()->getItem().getCount(); // integer カウント値
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類の名前
counterName, // カウンターの名前
countUpValue, // カウントアップする量(オプション値)
maxValue // カウントアップを許容する最大値 を入力してください(オプション値)
);
回数制限名とカウンター名を指定してゲームプレイヤーに紐づく回数制限カウンターをカウントアップ
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
limitName | string | true | 回数制限の種類の名前 |
counterName | string | true | カウンターの名前 |
countUpValue | integer | false | カウントアップする量 |
maxValue | integer | false | カウントアップを許容する最大値 を入力してください |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzCounter | カウントを増やしたカウンター |
回数制限の種類
回数制限の種類
記録する回数のバリエーション・リセットタイミングごとに種類を定義します。
EzLimitModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
limitModelId | string | true | 回数制限の種類 |
name | string | true | 回数制限の種類名 |
metadata | string | false | 回数制限の種類のメタデータ |
resetType | string | true | リセットタイミング |
resetDayOfMonth | integer | true | リセットをする日にち |
resetDayOfWeek | string | true | リセットする曜日 |
resetHour | integer | true | リセット時刻 |
listLimitModels
yield return gs2.Limit.ListLimitModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[LimitModel] 回数制限の種類のリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.limit.listLimitModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListLimitModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[LimitModel] 回数制限の種類のリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
回数制限モデルの一覧を取得
近日実施する予定のイベントに関する回数制限設定をしたことで、イベントの情報などが露呈する可能性があります。 回数制限モデルの持つ情報をゲーム内から使用しない場合は 本APIへのアクセス権を剥奪しておく方が安全です。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[LimitModel] | 回数制限の種類のリスト |
getLimitModel
yield return gs2.Limit.GetLimitModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.LimitModelId); // string 回数制限の種類
Debug.Log(r.Result.Item.Name); // string 回数制限の種類名
Debug.Log(r.Result.Item.Metadata); // string 回数制限の種類のメタデータ
Debug.Log(r.Result.Item.ResetType); // string リセットタイミング
Debug.Log(r.Result.Item.ResetDayOfMonth); // integer リセットをする日にち
Debug.Log(r.Result.Item.ResetDayOfWeek); // string リセットする曜日
Debug.Log(r.Result.Item.ResetHour); // integer リセット時刻
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類名
);
return client.limit.getLimitModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetLimitModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getLimitModelId(); // string 回数制限の種類
// r.getResult()->getItem().getName(); // string 回数制限の種類名
// r.getResult()->getItem().getMetadata(); // string 回数制限の種類のメタデータ
// r.getResult()->getItem().getResetType(); // string リセットタイミング
// r.getResult()->getItem().getResetDayOfMonth(); // integer リセットをする日にち
// r.getResult()->getItem().getResetDayOfWeek(); // string リセットする曜日
// r.getResult()->getItem().getResetHour(); // integer リセット時刻
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
limitName, // 回数制限の種類名
);
回数制限名を指定して回数制限モデルを取得
近日実施する予定のイベントに関する回数制限設定をしたことで、イベントの情報などが露呈する可能性があります。 回数制限モデルの持つ情報をゲーム内から使用しない場合は 本APIへのアクセス権を剥奪しておく方が安全です。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
limitName | string | true | 回数制限の種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzLimitModel | 回数制限の種類 |
GS2-Lock
排他処理を実現するために使用します。 排他処理は同一ゲームプレイヤー内でのみ使用できます。そのため、他プレイヤーとの共有リソースのロックには使用できません。 GS2のサービス間連携の際には自動的にロックを取得して処理が実行されます。
GS2のサービス間連携との衝突を避けたい処理を実装したければ、ネームスペースに x_gs2_distribute
を指定して、ロックしたいリソースのGRNをキーにロックを取得してください。
このネームスペースに関しては事前にネームスペースを作成することなく利用できます。
ミューテックス
ミューテックス
参照カウント付きのロックオブジェクト。 たとえロック中でも同一トランザクションIDによるロック取得の場合は参照カウントが上昇し、ロックを取得できます。 アンロックする場合も同様に、ロックを取得したときに指定したトランザクションIDを指定してアンロックしなければエラーになります。 複数回ロックを取得して参照カウントが上昇している場合は、参照カウントが0になるまでアンロックするまで実際には開放されません。
EzMutex
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
mutexId | string | true | ミューテックス |
propertyId | string | true | プロパティID |
transactionId | string | true | ロックを取得したトランザクションID |
referenceCount | integer | true | 参照回数 |
ttlAt | long | true | ロックの有効期限 |
lock
yield return gs2.Lock.Lock(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.MutexId); // string ミューテックス
Debug.Log(r.Result.Item.PropertyId); // string プロパティID
Debug.Log(r.Result.Item.TransactionId); // string ロックを取得したトランザクションID
Debug.Log(r.Result.Item.ReferenceCount); // integer 参照回数
Debug.Log(r.Result.Item.TtlAt); // long ロックの有効期限
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // カテゴリー名
propertyId, // プロパティID
transactionId, // ロックを取得するトランザクションID
ttl, // ロックを取得する期限(秒)
);
return client.lock.lock(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncLockResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getMutexId(); // string ミューテックス
// r.getResult()->getItem().getPropertyId(); // string プロパティID
// r.getResult()->getItem().getTransactionId(); // string ロックを取得したトランザクションID
// r.getResult()->getItem().getReferenceCount(); // integer 参照回数
// r.getResult()->getItem().getTtlAt(); // long ロックの有効期限
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // カテゴリー名
propertyId, // プロパティID
transactionId, // ロックを取得するトランザクションID
ttl, // ロックを取得する期限(秒)
);
ロックを取得
ttl で指定した秒数 プロパティID
のリソースをロックします。
ロックする際には トランザクションID
を指定する必要があります。
異なる トランザクションID
による同一 プロパティID
に対するロック取得は失敗します。
同一トランザクションからのロック取得リクエストの場合は参照カウントを増やします。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | カテゴリー名 |
propertyId | string | true | プロパティID |
transactionId | string | true | ロックを取得するトランザクションID |
ttl | long | true | ロックを取得する期限(秒) |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzMutex | ミューテックス |
unlock
yield return gs2.Lock.Unlock(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.MutexId); // string ミューテックス
Debug.Log(r.Result.Item.PropertyId); // string プロパティID
Debug.Log(r.Result.Item.TransactionId); // string ロックを取得したトランザクションID
Debug.Log(r.Result.Item.ReferenceCount); // integer 参照回数
Debug.Log(r.Result.Item.TtlAt); // long ロックの有効期限
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // カテゴリー名
propertyId, // プロパティID
transactionId, // ロックを取得したトランザクションID
);
return client.lock.unlock(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUnlockResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getMutexId(); // string ミューテックス
// r.getResult()->getItem().getPropertyId(); // string プロパティID
// r.getResult()->getItem().getTransactionId(); // string ロックを取得したトランザクションID
// r.getResult()->getItem().getReferenceCount(); // integer 参照回数
// r.getResult()->getItem().getTtlAt(); // long ロックの有効期限
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // カテゴリー名
propertyId, // プロパティID
transactionId, // ロックを取得したトランザクションID
);
ロックを解放
ロックの解放には同一 トランザクションID
から解放する必要があります。
ロックの取得時に再入を行った場合は同一回数ロックの解放を行い、参照カウントが0になったタイミングで実際に解放が行われます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | カテゴリー名 |
propertyId | string | true | プロパティID |
transactionId | string | true | ロックを取得したトランザクションID |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzMutex | ミューテックス |
GS2-Lottery
抽選処理を実現するために使用します。
抽選処理は排出確率テーブルを元に行われます。 排出確率テーブルには、景品ごとの排出される重みを設定します。 例えば、景品Aに3を設定し、景品Bに1を設定した場合、景品Aの排出確率は75%、景品Bは排出確率は25%となります。
また、景品として他の排出確率テーブルを設定することもできます。 あらかじめSSR、SR、Rなどの同一レアリティごとに排出確率テーブルを用意しておき、それらを景品とした排出確率テーブルをつくることで、レアリティごとの排出確率を容易に設定できます。
抽選処理には2つのモードがあり、抽選の種類で設定できます。 1つ目は毎回変わらない確率で一様に抽選処理を行うモード、2つ目はボックスガチャモードです。 ボックスガチャとは、抽選処理を行うごとに景品を箱から取り出していき、最初に箱に入れた数と同回数抽選を行うと、必ずすべての景品が手に入るという方式です。 モードにボックスガチャを設定した場合は、排出テーブルに設定した重みの数だけ箱に景品が入った状態から抽選が始まります。
ボックス
ボックス
排出済みの景品を管理します。 排出済みの景品は、排出確率テーブルに設定された重みの合計に対するインデックスで管理されます。 そのため、抽選を行った後で排出確率テーブルの重みを変更すると排出済み景品との不整合が発生します。
EzBox
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
prizeTableName | string | true | 排出確率テーブル名 |
drawnIndexes | list[integer] | true | 排出済み景品のインデックスのリスト |
describeBoxes
yield return gs2.Lottery.DescribeBoxes(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Box] ボックスのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.lottery.describeBoxes(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDescribeBoxesResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Box] ボックスのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
ボックスの排出済みアイテム情報一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Box] | ボックスのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getBox
yield return gs2.Lottery.GetBox(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.BoxId); // string ボックス
Debug.Log(r.Result.Item.PrizeTableName); // string 排出確率テーブル名
Debug.Log(r.Result.Item.Items); // list[BoxItem] ボックスから取り出したアイテムのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
prizeTableName, // 排出確率テーブル名
);
return client.lottery.getBox(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetBoxResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getBoxId(); // string ボックス
// r.getResult()->getItem().getPrizeTableName(); // string 排出確率テーブル名
// r.getResult()->getItem().getItems(); // list[BoxItem] ボックスから取り出したアイテムのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
prizeTableName, // 排出確率テーブル名
);
ボックスの排出済みアイテム情報を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
prizeTableName | string | true | 排出確率テーブル名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzBoxItems | ボックスから取り出したアイテムのリスト |
resetBox
yield return gs2.Lottery.ResetBox(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
prizeTableName, // 排出確率テーブル名
);
return client.lottery.resetBox(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncResetBoxResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
prizeTableName, // 排出確率テーブル名
);
ボックスのリセット
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
prizeTableName | string | true | 排出確率テーブル名 |
- リザルト
パラメータ | データ型 | 説明 |
---|
抽選処理
抽選処理
listProbabilities
yield return gs2.Lottery.ListProbabilities(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Probability] 景品の当選確率リスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
lotteryName, // 抽選モデルの種類名
);
return client.lottery.listProbabilities(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListProbabilitiesResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Probability] 景品の当選確率リスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
lotteryName, // 抽選モデルの種類名
);
排出確率を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
lotteryName | string | true | 抽選モデルの種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Probability] | 景品の当選確率リスト |
排出レート
排出レート
通常抽選ではすべてのゲームプレイヤーに対して同じ確率を応答します。 ボックス抽選ではボックスの中身の残りを考慮したゲームプレイヤーごとに異なる確率を応答します。
EzProbability
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
prize | DrawnPrize | true | 景品の種類 |
rate | float | true | 排出確率(0.0〜1.0) |
入手アクション
入手アクション
EzAcquireAction
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
action | string | true | スタンプシートで実行するアクションの種類 |
request | string | true | 入手リクエストのJSON |
排出された景品
排出された景品
EzDrawnPrize
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
acquireActions | list[AcquireAction] | false | 入手アクションのリスト |
ボックスから取り出したアイテム
ボックスから取り出したアイテム
EzBoxItem
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
acquireActions | list[AcquireAction] | false | 入手アクションのリスト |
remaining | integer | true | 残り数量 |
initial | integer | true | 初期数量 |
ボックスから取り出したアイテムのリスト
ボックスから取り出したアイテムのリスト
EzBoxItems
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
boxId | string | true | ボックス |
prizeTableName | string | true | 排出確率テーブル名 |
items | list[BoxItem] | true | ボックスから取り出したアイテムのリスト |
設定値
設定値
EzConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
key | string | false | 名前 |
value | string | false | 値 |
GS2-Matchmaking
対戦相手や協力相手を実現するサービスです。
マッチメイキングの流れは以下です。
ホストがギャザリングの作成 ↓ 参加者が条件にみあうギャザリングを検索 ↓ 規定人数が集まったらマッチメイキング完了
GS2-Matchmaking はこの流れのうち 参加者が条件にみあうギャザリングを検索
に関してできるだけ多くのニーズをみたせるよう設計されています。
ここでは、ユースケースを交えつつ、その設計例を解説します。
- 同じゲームモードを希望する対戦相手を見つけたい
ゲーム内には、カジュアルプレイヤー向けと、コアゲーマー向けの2種類のゲームモードがあります。 これらのプレイヤーを混ぜることなくマッチメイキング処理を行いたいとします。
ギャザリングを作成する際にも、ギャザリングを検索する際にも、最大5つの属性値を指定できます。 ギャザリングを作成する際には募集するプレイヤーが持つ属性値の範囲を指定し、 ギャザリングを検索する際には、自身の属性値の値を指定して処理依頼をします。
つまり、ホストがギャザリングを作成する際に 属性値1
に募集するゲームモードを指定し、
検索する側も自分が参加したいゲームモードを 属性値1
に指定することで、希望するゲームモードが同じプレイヤー同士がマッチメイキングされます。
- 1 に加えて同じレベル帯の対戦相手を見つけたい
ホストはギャザリングを作成する際に 属性値2
に募集するレベルの最小値と最大値を指定します。
検索する側は自分のレベルを 属性値2
に指定することで、同じレベル帯のプレイヤー同士がマッチメイキングされます。
複数の属性値を指定した場合はすべての属性値の範囲をみたす相手を探すよう処理されます。
- レーティング
同じレベル帯によるマッチングを実現するため、 属性値2
に指定するためのレーティングも提供しています。
レーティングの計算処理には Glicko-2 rating system をベースとした計算アルゴリズムを採用しています。
レーティング値の初期値は1500で、レーティングの値が離れた相手に勝利するほど上昇幅は大きく、同じく負けた側は減少幅は大きくなります。
レーティングは3人以上の対戦にも対応しており、個人戦の場合は順位で、チーム戦の場合は勝ち負けでレーティングを計算することができます。
チーム戦の場合でも活躍度などでレートの増減に差をつけたい場合は順位で計算することができます。
- 2 に加えて待ち時間が長くなったときに募集するレベル帯を広げたい
最初は狭い範囲で募集し、なるべく同じレベルのプレイヤー同士でマッチメイキングするが、なかなか対戦相手が見つからない場合、募集するレベル帯を広げて募集したいとします。 ギャザリングを作成しておよそ1分ごとに発火する GS2-Script イベントがあります。 このスクリプトにて、ギャザリングの属性値の範囲を緩和することで、徐々に希望する条件を緩和する処理を実装できます。
- フレンドだけが参加できるギャザリングを作る
ギャザリングを作成するときのオプションとして、参加を許可するユーザIDリストを指定できます。 これを使い、フレンドのユーザIDリストを指定することで、参加者を限定することができます。
- ハラスメントをしてきたプレイヤーとマッチメイキングされないようにしたい
ギャザリングの作成時・検索時にユーザIDのブラックリストを指定できます。 検索時に指定したブラックリストは、条件に一致するギャザリングを発見し、参加したギャザリングのブラックリストに加えられます。 検索する際に自身がブラックリストに入っている場合はマッチメイキングの対象から除外されます。
- ロール別マッチメイキング
ゲームによっては盾役1人、回復役1人、攻撃役2人でマッチメイキングを行いたいことがあります。
このときに使用できるのが ロール属性
です。
盾役として tank
を、回復役として healer
を、攻撃役として attacker
というロールを想定します。
ギャザリングを作成するときに各ロールの募集人数を設定します。
ギャザリングの検索時に自分のロールに設定することで、ロールに関して空きのあるギャザリングだけが参加可能なギャザリングとして処理されます。
募集ロールにはエイリアスを設定することもできます。
例えば、 tank
を更に具体的なロールで表現し、 paladin
と warrior
と dark_knight
のいずれかとしてギャザリングの検索を行うとします。
ギャザリングを作成するときに、 tank
のエイリアスに paladin
と dark_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種類の方法を提供します。
- GS2-Chat と連携したチャットルーム作成
- GS2-Realtime と連携したゲームサーバの起動
募集が終わっていない状態でも、プレイヤー間のでメタデータを低頻度で交換したい場合は前者を、 募集しながらNPCを交えたり人数が不足した状態でゲームを遊ばせたい場合は後者を使用します。
低頻度・高頻度の判断基準として使用できるのが GS2-Chat の持つ制限です。 GS2-Chat は1つのチャットルームに対して秒間3回しか発言ができません。この頻度を超える場合は GS2-Realtime を使用してください。
- マッチメイキング完了後の処理の方法
マッチメイキングが完了したときに GS2-Gateway を使用したゲーム内プッシュ通知
か GS2-JobQueue によるジョブ登録
でプレイヤーにマッチメイキングの完了を知らせることができます。
また、GS2-Script を使用して任意のスクリプトを実行することもできます。
GS2-Realtime を使用してマッチメイキング後の対戦・協力プレイを実現する場合は、マッチメイキング完了後に実行される GS2-Script で
GS2-Realtime のギャザリングを作成し、そのギャザリングのIPアドレス・ポートの情報を GS2-Gateway を使用したゲーム内プッシュ通知
か GS2-JobQueue によるジョブ登録
を使用して通知することで、ゲームサーバに誘導できます。
ギャザリング
ギャザリング
編成中・編成されたギャザリングの参加条件や参加メンバーに関する情報を保持。
EzGathering
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
gatheringId | string | true | ギャザリング |
name | string | true | ギャザリング名 |
attributeRanges | list[AttributeRange] | false | 募集条件 |
capacityOfRoles | list[CapacityOfRole] | true | 参加者 |
allowUserIds | list[string] | true | 参加を許可するユーザIDリスト |
metadata | string | false | メタデータ |
expiresAt | long | false | ギャザリングの有効期限 |
createdAt | long | true | 作成日時 |
updatedAt | long | true | 最終更新日時 |
createGathering
yield return gs2.Matchmaking.CreateGathering(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
Debug.Log(r.Result.Item.Name); // string ギャザリング名
Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
player, // 自身のプレイヤー情報
capacityOfRoles, // 参加者
allowUserIds, // 参加を許可するユーザIDリスト
attributeRanges, // 募集条件(オプション値)
expiresAt // ギャザリングの有効期限(オプション値)
);
return client.matchmaking.createGathering(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateGatheringResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getGatheringId(); // string ギャザリング
// r.getResult()->getItem().getName(); // string ギャザリング名
// r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
// r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
// r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
player, // 自身のプレイヤー情報
capacityOfRoles, // 参加者
allowUserIds, // 参加を許可するユーザIDリスト
attributeRanges, // 募集条件(オプション値)
expiresAt // ギャザリングの有効期限(オプション値)
);
ギャザリングを新規作成
Player に指定する自身のプレイヤー情報のユーザIDは省略できます。 expiresAtを指定することでギャザリングの有効期限を設定することができます。 有効期限を用いない場合、古いギャザリングが残り続けマッチングが成立したときには、 ユーザーがゲームから離脱している可能性があります。 有効期限を用いる場合は、有効期限が来るたびにユーザーにギャザリングの再作成を促す仕組みにしてください。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
player | Player | true | 自身のプレイヤー情報 |
attributeRanges | list[AttributeRange] | false | 募集条件 |
capacityOfRoles | list[CapacityOfRole] | true | 参加者 |
allowUserIds | list[string] | true | 参加を許可するユーザIDリスト |
expiresAt | long | false | ギャザリングの有効期限 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzGathering | ギャザリング |
updateGathering
yield return gs2.Matchmaking.UpdateGathering(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
Debug.Log(r.Result.Item.Name); // string ギャザリング名
Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
gatheringName, // ギャザリング名
attributeRanges // 募集条件(オプション値)
);
return client.matchmaking.updateGathering(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncUpdateGatheringResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getGatheringId(); // string ギャザリング
// r.getResult()->getItem().getName(); // string ギャザリング名
// r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
// r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
// r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
gatheringName, // ギャザリング名
attributeRanges // 募集条件(オプション値)
);
ギャザリングの募集条件を変更
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
gatheringName | string | true | ギャザリング名 |
attributeRanges | list[AttributeRange] | false | 募集条件 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzGathering | ギャザリング |
doMatchmaking
yield return gs2.Matchmaking.DoMatchmaking(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
Debug.Log(r.Result.Item.Name); // string ギャザリング名
Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
Debug.Log(r.Result.MatchmakingContextToken); // string マッチメイキングの状態を保持するトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
player, // 自身のプレイヤー情報
matchmakingContextToken // 検索の再開に使用する マッチメイキングの状態を保持するトークン(オプション値)
);
return client.matchmaking.doMatchmaking(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncDoMatchmakingResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getGatheringId(); // string ギャザリング
// r.getResult()->getItem().getName(); // string ギャザリング名
// r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
// r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
// r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
// r.getResult()->getMatchmakingContextToken(); // string マッチメイキングの状態を保持するトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
player, // 自身のプレイヤー情報
matchmakingContextToken // 検索の再開に使用する マッチメイキングの状態を保持するトークン(オプション値)
);
すでに存在する中で、自分が参加できるギャザリングを探して参加
一定時間 検索を行い、対象が見つからなかったときには マッチメイキングの状態を保持するトークン
を返す。
次回 マッチメイキングの状態を保持するトークン
をつけて再度リクエストを出すことで、前回の続きから検索処理を再開できる。
すべてのギャザリングを検索したが、参加できるギャザリングが存在しなかった場合はギャザリングもトークンもどちらも null
が応答される。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
player | Player | true | 自身のプレイヤー情報 |
matchmakingContextToken | string | false | 検索の再開に使用する マッチメイキングの状態を保持するトークン |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzGathering | ギャザリング |
matchmakingContextToken | string | マッチメイキングの状態を保持するトークン |
getGathering
yield return gs2.Matchmaking.GetGathering(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
Debug.Log(r.Result.Item.Name); // string ギャザリング名
Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
gatheringName, // ギャザリング名
);
return client.matchmaking.getGathering(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetGatheringResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getGatheringId(); // string ギャザリング
// r.getResult()->getItem().getName(); // string ギャザリング名
// r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
// r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
// r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
gatheringName, // ギャザリング名
);
最新のギャザリングの状態を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
gatheringName | string | true | ギャザリング名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzGathering | ギャザリング |
cancelMatchmaking
yield return gs2.Matchmaking.CancelMatchmaking(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.GatheringId); // string ギャザリング
Debug.Log(r.Result.Item.Name); // string ギャザリング名
Debug.Log(r.Result.Item.AttributeRanges); // list[AttributeRange] 募集条件
Debug.Log(r.Result.Item.CapacityOfRoles); // list[CapacityOfRole] 参加者
Debug.Log(r.Result.Item.AllowUserIds); // list[string] 参加を許可するユーザIDリスト
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.ExpiresAt); // long ギャザリングの有効期限
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
gatheringName, // ギャザリング名
);
return client.matchmaking.cancelMatchmaking(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCancelMatchmakingResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getGatheringId(); // string ギャザリング
// r.getResult()->getItem().getName(); // string ギャザリング名
// r.getResult()->getItem().getAttributeRanges(); // list[AttributeRange] 募集条件
// r.getResult()->getItem().getCapacityOfRoles(); // list[CapacityOfRole] 参加者
// r.getResult()->getItem().getAllowUserIds(); // list[string] 参加を許可するユーザIDリスト
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getExpiresAt(); // long ギャザリングの有効期限
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
gatheringName, // ギャザリング名
);
マッチメイキングをキャンセルし、参加中のギャザリングから離脱。
ギャザリングから離脱する前にマッチメイキングが完了した場合は、NotFoundException(404エラー) が発生し失敗します。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
gatheringName | string | true | ギャザリング名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzGathering | ギャザリング |
レーティングモデル
レーティングモデル
EzRatingModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | レーティングの種類名 |
metadata | string | false | レーティングの種類のメタデータ |
volatility | integer | true | レート値の変動の大きさ |
listRatingModels
yield return gs2.Matchmaking.ListRatingModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[RatingModel] レーティングモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.matchmaking.listRatingModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListRatingModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[RatingModel] レーティングモデルのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
レーティングモデルの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[RatingModel] | レーティングモデルのリスト |
getRatingModel
yield return gs2.Matchmaking.GetRatingModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string レーティングの種類名
Debug.Log(r.Result.Item.Metadata); // string レーティングの種類のメタデータ
Debug.Log(r.Result.Item.Volatility); // integer レート値の変動の大きさ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ratingName, // レーティングの種類名
);
return client.matchmaking.getRatingModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRatingModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string レーティングの種類名
// r.getResult()->getItem().getMetadata(); // string レーティングの種類のメタデータ
// r.getResult()->getItem().getVolatility(); // integer レート値の変動の大きさ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ratingName, // レーティングの種類名
);
レーティング名を指定してレーティングモデルを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
ratingName | string | true | レーティングの種類名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRatingModel | レーティングモデル |
ギャザリング参加可能な属性値の範囲
ギャザリング参加可能な属性値の範囲
EzAttributeRange
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | 属性名 |
min | integer | true | ギャザリング参加可能な属性値の最小値 |
max | integer | true | ギャザリング参加可能な属性値の最大値 |
ロールごとのキャパシティ
ロールごとのキャパシティ
EzCapacityOfRole
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
roleName | string | true | ロール名 |
roleAliases | list[string] | false | ロール名の別名リスト |
capacity | integer | true | 募集人数 |
participants | list[Player] | true | 参加者のプレイヤー情報リスト |
プレイヤーの属性値
プレイヤーの属性値
EzAttribute
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | 属性名 |
value | integer | true | 属性値 |
プレイヤー情報
プレイヤー情報
EzPlayer
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
attributes | list[Attribute] | false | 属性値のリスト |
roleName | string | true | ロール名 |
denyUserIds | list[string] | true | 参加を拒否するユーザIDリスト |
レーティング
レーティング
ゲームの強さを表す数値を保持。
EzRating
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
ratingId | string | true | レーティング |
name | string | true | レーティング名 |
userId | string | true | ユーザーID |
rateValue | float | true | |
createdAt | long | true | 作成日時 |
updatedAt | long | true | 最終更新日時 |
listRatings
yield return gs2.Matchmaking.ListRatings(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Rating] レーティングのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.matchmaking.listRatings(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListRatingsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Rating] レーティングのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
レーティング名を指定してレーティングを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Rating] | レーティングのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getRating
yield return gs2.Matchmaking.GetRating(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.RatingId); // string レーティング
Debug.Log(r.Result.Item.Name); // string レーティング名
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RateValue); // float None
Debug.Log(r.Result.Item.CreatedAt); // long 作成日時
Debug.Log(r.Result.Item.UpdatedAt); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ratingName, // レーティング名
);
return client.matchmaking.getRating(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetRatingResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getRatingId(); // string レーティング
// r.getResult()->getItem().getName(); // string レーティング名
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRateValue(); // float None
// r.getResult()->getItem().getCreatedAt(); // long 作成日時
// r.getResult()->getItem().getUpdatedAt(); // long 最終更新日時
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ratingName, // レーティング名
);
投票用紙を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
ratingName | string | true | レーティング名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzRating | レーティング |
対戦結果
対戦結果
順位とユーザIDの組み合わせ。 引き分けの場合は同じ順位を指定します。 チーム戦の場合はチームメイトは同じ順位になるようにしてください。
EzGameResult
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
rank | integer | true | 順位 |
userId | string | true | ユーザーID |
投票用紙
投票用紙
EzBallot
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
userId | string | true | ユーザーID |
ratingName | string | true | レーティング計算に使用するレーティング名 |
gatheringName | string | true | 投票対象のギャザリング名 |
numberOfPlayer | integer | true | 参加人数 |
署名済みの投票用紙
署名済みの投票用紙
EzSignedBallot
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
body | string | true | 投票用紙の署名対象のデータ |
signature | string | true | 投票用紙の署名 |
投票状況
投票状況
createVote
yield return gs2.Matchmaking.CreateVote(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RatingName); // string レーティング計算に使用するレーティング名
Debug.Log(r.Result.Item.GatheringName); // string 投票対象のギャザリング名
Debug.Log(r.Result.Item.NumberOfPlayer); // integer 参加人数
Debug.Log(r.Result.Body); // string 署名対象のデータ
Debug.Log(r.Result.Signature); // string 署名データ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ratingName, // レーティング名
gatheringName, // 投票対象のギャザリング名
);
return client.matchmaking.createVote(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncCreateVoteResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRatingName(); // string レーティング計算に使用するレーティング名
// r.getResult()->getItem().getGatheringName(); // string 投票対象のギャザリング名
// r.getResult()->getItem().getNumberOfPlayer(); // integer 参加人数
// r.getResult()->getBody(); // string 署名対象のデータ
// r.getResult()->getSignature(); // string 署名データ
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ratingName, // レーティング名
gatheringName, // 投票対象のギャザリング名
);
投票用紙を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
ratingName | string | true | レーティング名 |
gatheringName | string | true | 投票対象のギャザリング名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzBallot | 投票用紙 |
body | string | 署名対象のデータ |
signature | string | 署名データ |
vote
yield return gs2.Matchmaking.Vote(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RatingName); // string レーティング計算に使用するレーティング名
Debug.Log(r.Result.Item.GatheringName); // string 投票対象のギャザリング名
Debug.Log(r.Result.Item.NumberOfPlayer); // integer 参加人数
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ballotBody, // 投票用紙の署名対象のデータ
ballotSignature, // 投票用紙の署名
gameResults, // 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト
);
return client.matchmaking.vote(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncVoteResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRatingName(); // string レーティング計算に使用するレーティング名
// r.getResult()->getItem().getGatheringName(); // string 投票対象のギャザリング名
// r.getResult()->getItem().getNumberOfPlayer(); // integer 参加人数
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
ballotBody, // 投票用紙の署名対象のデータ
ballotSignature, // 投票用紙の署名
gameResults, // 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト
);
対戦結果を投票します。
投票は最初の投票が行われてから5分以内に行う必要があります。 つまり、結果は即座に反映されず、投票開始からおよそ5分後または全てのプレイヤーが投票を行った際に結果が反映されます。 5分以内に全ての投票用紙を回収できなかった場合はその時点の投票内容で多数決をとって結果を決定します。 各結果の投票数が同一だった場合は結果は捨てられます(スクリプトで挙動を変更可)。
結果を即座に反映したい場合は、勝利した側の代表プレイヤーが投票用紙を各プレイヤーから集めて voteMultiple を呼び出すことで結果を即座に反映できます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
ballotBody | string | true | 投票用紙の署名対象のデータ |
ballotSignature | string | true | 投票用紙の署名 |
gameResults | list[GameResult] | true | 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzBallot | 投票用紙 |
voteMultiple
yield return gs2.Matchmaking.VoteMultiple(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.UserId); // string ユーザーID
Debug.Log(r.Result.Item.RatingName); // string レーティング計算に使用するレーティング名
Debug.Log(r.Result.Item.GatheringName); // string 投票対象のギャザリング名
Debug.Log(r.Result.Item.NumberOfPlayer); // integer 参加人数
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
signedBallots, // 署名付の投票用紙リスト
gameResults, // 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト
);
return client.matchmaking.voteMultiple(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncVoteMultipleResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getUserId(); // string ユーザーID
// r.getResult()->getItem().getRatingName(); // string レーティング計算に使用するレーティング名
// r.getResult()->getItem().getGatheringName(); // string 投票対象のギャザリング名
// r.getResult()->getItem().getNumberOfPlayer(); // integer 参加人数
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
signedBallots, // 署名付の投票用紙リスト
gameResults, // 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト
);
対戦結果をまとめて投票します。
ゲームに勝利した側が他プレイヤーの投票用紙を集めてまとめて投票するのに使用します。 『勝利した側』としているのは、敗北した側が自分たちが勝ったことにして報告することにインセンティブはありますが、その逆はないためです。 負けた側が投票用紙を渡してこない可能性がありますが、その場合も過半数の投票用紙があれば結果を通すことができます。
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
signedBallots | list[SignedBallot] | true | 署名付の投票用紙リスト |
gameResults | list[GameResult] | true | 投票内容。対戦を行ったプレイヤーグループ1に所属するユーザIDのリスト |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzBallot | 投票用紙 |
GS2-Mission
ミッション機能を提供するサービスです。
ミッション機能は「n回 クエストをクリアする」「n体のキャラクターを入手する」のような条件を設定し、達成することで報酬が得られる仕組みです。 これを実現するために ”ミッションの条件設定” ”カウンターの購読” ”カウンターの上昇” という仕組みを使います。
ミッションの条件設定とは、ミッションが達成されたことになるカウンターの閾値を設定するものです。
カウンターの購読とは、ミッションの対象となるカウンターの設定です。 1つのカウンターは複数のミッションから購読することができ、ミッションごとに異なるリセットタイミングを設定できます。 たとえば、「クエストを通算1000回クリアした」というミッションと、「クエストを今日10回クリアした」というデイリーミッションを作りたい場合、 クエストをクリアするごとにカウントアップされる1つのカウンターを両方のミッションから購読し、前者には 'リセットなし' 、後者には '毎日' のリセットタイミングを設定することで、1回のカウンター操作で複数の条件のミッションを処理することができます。
カウンターの上昇 は文字通りカウンターを上昇させる操作で、例えばクエストをクリアしたときにクエストのクリア回数のカウンター上昇を報酬に含めて使用します。
ミッションには2つの期間を設定できます。 1つ目はカウンターを操作できる期間で、カウンターを上昇させるのをイベント開催期間に限定するようなケースで使用します。 2つ目はミッション達成報酬の受け取り可能期間で、イベントが終わった後もしばらくミッションの報酬だけは受け取れるようにしたい場合は2つの期間を別に設定して使用します。 期間の指定には GS2-Schedule のイベントを関連付けます。
ミッションタスク
ミッションタスク
ミッションの内容を定義。達成条件や達成報酬を設定します。
EzMissionTaskModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | タスク名 |
metadata | string | false | メタデータ |
counterName | string | true | カウンター名 |
targetValue | long | true | 目標値 |
completeAcquireActions | list[AcquireAction] | false | ミッション達成時の報酬 |
challengePeriodEventId | string | false | 達成報酬の受け取り可能な期間を指定するイベントマスター のGRN |
premiseMissionTaskName | string | false | このタスクに挑戦するために達成しておく必要のあるタスクの名前 |
listMissionTaskModels
yield return gs2.Mission.ListMissionTaskModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[MissionTaskModel] ミッションタスクのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // グループ名
);
return client.mission.listMissionTaskModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMissionTaskModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[MissionTaskModel] ミッションタスクのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // グループ名
);
ミッションタスクモデルの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
missionGroupName | string | true | グループ名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[MissionTaskModel] | ミッションタスクのリスト |
getMissionTaskModel
yield return gs2.Mission.GetMissionTaskModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string タスク名
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.CounterName); // string カウンター名
Debug.Log(r.Result.Item.TargetValue); // long 目標値
Debug.Log(r.Result.Item.CompleteAcquireActions); // list[AcquireAction] ミッション達成時の報酬
Debug.Log(r.Result.Item.ChallengePeriodEventId); // string 達成報酬の受け取り可能な期間を指定するイベントマスター のGRN
Debug.Log(r.Result.Item.PremiseMissionTaskName); // string このタスクに挑戦するために達成しておく必要のあるタスクの名前
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // グループ名
missionTaskName, // タスク名
);
return client.mission.getMissionTaskModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetMissionTaskModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string タスク名
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getCounterName(); // string カウンター名
// r.getResult()->getItem().getTargetValue(); // long 目標値
// r.getResult()->getItem().getCompleteAcquireActions(); // list[AcquireAction] ミッション達成時の報酬
// r.getResult()->getItem().getChallengePeriodEventId(); // string 達成報酬の受け取り可能な期間を指定するイベントマスター のGRN
// r.getResult()->getItem().getPremiseMissionTaskName(); // string このタスクに挑戦するために達成しておく必要のあるタスクの名前
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // グループ名
missionTaskName, // タスク名
);
ミッションタスク名を指定してミッションタスクモデルを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
missionGroupName | string | true | グループ名 |
missionTaskName | string | true | タスク名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzMissionTaskModel | ミッションタスク |
リセットタイミングまでの期間のカウンター値
リセットタイミングまでの期間のカウンター値
EzScopedValue
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
resetType | string | true | リセットタイミング |
value | long | true | カウント |
カウンターの種類
カウンターの種類
EzCounterModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | カウンター名 |
metadata | string | false | メタデータ |
scopes | list[CounterScopeModel] | true | カウンターのリセットタイミング |
challengePeriodEventId | string | false | カウントアップ可能な期間を指定するイベントマスター のGRN |
listCounterModels
yield return gs2.Mission.ListCounterModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[CounterModel] カウンターの種類のリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.mission.listCounterModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCounterModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[CounterModel] カウンターの種類のリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
カウンターの種類を認証
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[CounterModel] | カウンターの種類のリスト |
getCounterModel
yield return gs2.Mission.GetCounterModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string カウンター名
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.Scopes); // list[CounterScopeModel] カウンターのリセットタイミング
Debug.Log(r.Result.Item.ChallengePeriodEventId); // string カウントアップ可能な期間を指定するイベントマスター のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
counterName, // カウンター名
);
return client.mission.getCounterModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCounterModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string カウンター名
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getScopes(); // list[CounterScopeModel] カウンターのリセットタイミング
// r.getResult()->getItem().getChallengePeriodEventId(); // string カウントアップ可能な期間を指定するイベントマスター のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
counterName, // カウンター名
);
カウンターの種類を認証
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
counterName | string | true | カウンター名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzCounterModel | カウンターの種類 |
ミッショングループ
ミッショングループ
デイリーミッション・ウィークリーミッション、イベントミッションなど、ミッションをグループ分けするのに使用します。
EzMissionGroupModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | グループ名 |
metadata | string | false | メタデータ |
tasks | list[MissionTaskModel] | false | タスクリスト |
resetType | string | true | リセットタイミング |
resetDayOfMonth | integer | true | リセットをする日にち |
resetDayOfWeek | string | true | リセットする曜日 |
resetHour | integer | true | リセット時刻 |
completeNotificationNamespaceId | string | false | ミッションを達成したときの通知先ネームスペース のGRN |
listMissionGroupModels
yield return gs2.Mission.ListMissionGroupModels(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[MissionGroupModel] ミッショングループのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
return client.mission.listMissionGroupModels(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListMissionGroupModelsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[MissionGroupModel] ミッショングループのリスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
);
ミッショングループモデルの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[MissionGroupModel] | ミッショングループのリスト |
getMissionGroupModel
yield return gs2.Mission.GetMissionGroupModel(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string グループ名
Debug.Log(r.Result.Item.Metadata); // string メタデータ
Debug.Log(r.Result.Item.Tasks); // list[MissionTaskModel] タスクリスト
Debug.Log(r.Result.Item.ResetType); // string リセットタイミング
Debug.Log(r.Result.Item.ResetDayOfMonth); // integer リセットをする日にち
Debug.Log(r.Result.Item.ResetDayOfWeek); // string リセットする曜日
Debug.Log(r.Result.Item.ResetHour); // integer リセット時刻
Debug.Log(r.Result.Item.CompleteNotificationNamespaceId); // string ミッションを達成したときの通知先ネームスペース のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // グループ名
);
return client.mission.getMissionGroupModel(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetMissionGroupModelResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string グループ名
// r.getResult()->getItem().getMetadata(); // string メタデータ
// r.getResult()->getItem().getTasks(); // list[MissionTaskModel] タスクリスト
// r.getResult()->getItem().getResetType(); // string リセットタイミング
// r.getResult()->getItem().getResetDayOfMonth(); // integer リセットをする日にち
// r.getResult()->getItem().getResetDayOfWeek(); // string リセットする曜日
// r.getResult()->getItem().getResetHour(); // integer リセット時刻
// r.getResult()->getItem().getCompleteNotificationNamespaceId(); // string ミッションを達成したときの通知先ネームスペース のGRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // グループ名
);
ミッショングループ名を指定してミッショングループモデルを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
namespaceName | string | true | ネームスペース名 |
missionGroupName | string | true | グループ名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzMissionGroupModel | ミッショングループ |
設定値
設定値
EzConfig
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
key | string | false | 名前 |
value | string | false | 値 |
カウンター
カウンター
リセットタイミングごとのカウンターの値を保持します。
EzCounter
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
name | string | true | カウンター名 |
values | list[ScopedValue] | true | 値 |
listCounters
yield return gs2.Mission.ListCounters(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Counter] カウンターのリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.mission.listCounters(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCountersResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Counter] カウンターのリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
達成したミッションの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Counter] | カウンターのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getCounter
yield return gs2.Mission.GetCounter(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.Name); // string カウンター名
Debug.Log(r.Result.Item.Values); // list[ScopedValue] 値
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
counterName, // カウンター名
);
return client.mission.getCounter(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCounterResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getName(); // string カウンター名
// r.getResult()->getItem().getValues(); // list[ScopedValue] 値
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
counterName, // カウンター名
);
ミッショングループを指定して達成したミッションを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
counterName | string | true | カウンター名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzCounter | カウンター |
カウンターのリセットタイミング
カウンターのリセットタイミング
EzCounterScopeModel
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
resetType | string | true | リセットタイミング |
resetDayOfMonth | integer | true | リセットをする日にち |
resetDayOfWeek | string | true | リセットする曜日 |
resetHour | integer | true | リセット時刻 |
達成状況
達成状況
ミッションの達成状況
EzComplete
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
missionGroupName | string | true | ミッショングループ名 |
completedMissionTaskNames | list[string] | true | 達成済みのタスク名リスト |
receivedMissionTaskNames | list[string] | true | 報酬の受け取り済みのタスク名リスト |
listCompletes
yield return gs2.Mission.ListCompletes(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Items); // list[Complete] 達成状況のリスト
Debug.Log(r.Result.NextPageToken); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
return client.mission.listCompletes(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncListCompletesResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItems(); // list[Complete] 達成状況のリスト
// r.getResult()->getNextPageToken(); // string リストの続きを取得するためのページトークン
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
pageToken, // データの取得を開始する位置を指定するトークン(オプション値)
limit // データの取得件数(オプション値)
);
達成したミッションの一覧を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
pageToken | string | false | データの取得を開始する位置を指定するトークン |
limit | long | false | データの取得件数 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
items | list[Complete] | 達成状況のリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
getComplete
yield return gs2.Mission.GetComplete(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.Item.MissionGroupName); // string ミッショングループ名
Debug.Log(r.Result.Item.CompletedMissionTaskNames); // list[string] 達成済みのタスク名リスト
Debug.Log(r.Result.Item.ReceivedMissionTaskNames); // list[string] 報酬の受け取り済みのタスク名リスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // ミッショングループ名
);
return client.mission.getComplete(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncGetCompleteResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getItem().getMissionGroupName(); // string ミッショングループ名
// r.getResult()->getItem().getCompletedMissionTaskNames(); // list[string] 達成済みのタスク名リスト
// r.getResult()->getItem().getReceivedMissionTaskNames(); // list[string] 報酬の受け取り済みのタスク名リスト
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // ミッショングループ名
);
ミッショングループを指定して達成したミッションを取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
missionGroupName | string | true | ミッショングループ名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
item | EzComplete | 達成状況 |
receiveRewards
yield return gs2.Mission.ReceiveRewards(
r => {
if (r.Error != null)
{
// エラーが発生した場合に到達
// r.Error は発生した例外オブジェクトが格納されている
}
else
{
Debug.Log(r.Result.StampSheet); // string ミッションの達成報酬を受領するスタンプシート
Debug.Log(r.Result.StampSheetEncryptionKeyId); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // ミッショングループ名
missionTaskName, // タスク名
);
return client.mission.receiveRewards(
GS2_LAMBDA_CAPTURE_BEGIN](gs2::ez::AsyncReceiveRewardsResult r)
{
if (r.getError())
{
// エラーが発生した場合に到達
// *r.getError() で発生した例外オブジェクトを取得できる
}
else
{
// r.getResult()->getStampSheet(); // string ミッションの達成報酬を受領するスタンプシート
// r.getResult()->getStampSheetEncryptionKeyId(); // string スタンプシートの署名計算に使用した暗号鍵GRN
}
},
gameSession, // GameSession ログイン状態を表すセッションオブジェクト
namespaceName, // ネームスペース名
missionGroupName, // ミッショングループ名
missionTaskName, // タスク名
);
ミッションの達成報酬を取得
- リクエスト
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
session | GameSession | true | ログイン状態を表すセッションオブジェクト |
namespaceName | string | true | ネームスペース名 |
missionGroupName | string | true | ミッショングループ名 |
missionTaskName | string | true | タスク名 |
- リザルト
パラメータ | データ型 | 説明 |
---|---|---|
stampSheet | string | ミッションの達成報酬を受領するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
入手アクション
入手アクション
EzAcquireAction
パラメータ | データ型 | 必須 | 説明 |
---|---|---|---|
action | string | true | スタンプシートで実行するアクションの種類 |
request | string | true | 入手リクエストのJSON |
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サーバに配置します。 そのため、公開条件が設定されたコンテンツが多数ある場合、組み合わせ爆発が発生し更新にかかる時間や費用が増大します。 公開条件が設定されたコンテンツが最小になるように工夫をしてください。
ビルドが行われるパターン数はサイトデータのアップロード時の戻り値で確認することができます。
クライアントが自身にとって現在有効なサイトデータを取得する方法として複数の方法が提供されます。
- サイトデータのzipファイルをDL
- ローカルストレージに保存することで、サイトデータに変更がない場合はキャッシュを利用できます。
- キャッシュが利用可能な状態かは『ニュースステートハッシュ』を GS2-News から取得し、値が変化していないかで判断できます。
- サイトにアクセスするために必要な Cookie とサイトデータがデプロイされた URL を取得
- 受け取った Cookie をブラウザに設定することでURLにアクセス可能な状態になります。
- Cookie に設定する権限情報は取得から1時間の有効期限を持っています。
サイトのビルドには 『-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:even