GS2-MegaField SDK for Game Engine API リファレンス
モデル
EzAreaModel
エリアは空間を分割するもので、同じ座標でもエリアが異なれば別空間として扱うことができます。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | エリアモデル名 | |
metadata | string | ~ 2048文字 | メタデータ | ||
layerModels | List<EzLayerModel> | ~ 1000 items | レイヤーモデル一覧 |
EzLayerModel
レイヤーは1つの空間内で複数の論理階層を実現します。
たとえば、キャラクターが大量に存在する空間で、エネミーが見えなくなってしまう問題を解決します。
レイヤー1 にはキャラクターを配置。レイヤー2にはエネミーを配置した場合、レイヤーごとに指定した距離内での取得数量を指定できるため、見えなくなる心配はありません。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | レイヤーモデル名 | |
metadata | string | ~ 2048文字 | メタデータ |
EzMyPosition
自分の位置情報
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
position | EzPosition | ✓ | 座標 | ||
vector | EzVector | ✓ | 向き | ||
r | float | ✓ | 1 | ~ 10000 | 半径 |
EzPosition
座標
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
x | float | ✓ | ~ 1048574 | X座標 | |
y | float | ✓ | ~ 1048574 | Y座標 | |
z | float | ✓ | ~ 1048574 | Z座標 |
EzScope
取得する周囲の状況
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
r | float | ✓ | 1 ~ 16777214 | 半径 | |
limit | int | ✓ | 1 ~ 100 | 最大数 |
EzSpatial
空間情報
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
userId | string | ✓ | ~ 128文字 | ユーザーID | |
areaModelName | string | ✓ | ~ 128文字 | エリア名 | |
layerModelName | string | ✓ | ~ 128文字 | レイヤー名 | |
position | EzPosition | ✓ | 座標 | ||
vector | EzVector | ✓ | 向き |
EzVector
座標
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
x | float | ✓ | ~ 1048574 | X座標 | |
y | float | ✓ | ~ 1048574 | Y座標 | |
z | float | ✓ | ~ 1048574 | Z座標 |
メソッド
describeAreaModels
エリアモデル一覧を取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 |
Result
型 | 説明 | |
---|---|---|
items | List<EzAreaModel> | エリアモデルのリスト |
実装例
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
);
var items = await domain.AreaModelsAsync(
).ToListAsync();
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.AreaModels(
);
List<EzAreaModel> items = new List<EzAreaModel>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
}
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
);
const auto It = Domain->AreaModels(
);
TArray<Gs2::UE5::MegaField::Model::FEzAreaModelPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}
値の変更イベントハンドリング
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeAreaModels(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeAreaModels(callbackId);
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.AreaModels(
);
List<EzAreaModel> items = new List<EzAreaModel>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
}
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeAreaModels(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeAreaModels(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
getAreaModel
エリアモデルを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
areaModelName | string | ✓ | ~ 128文字 | エリアモデル名 |
Result
型 | 説明 | |
---|---|---|
item | EzAreaModel | エリアモデル |
実装例
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
)->AreaModel(
"area-0001" // areaModelName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
)->AreaModel(
"area-0001" // areaModelName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::MegaField::Model::FAreaModel> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
describeLayerModels
エリアモデル一覧を取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
areaModelName | string | ✓ | ~ 128文字 | エリアモデル名 |
Result
型 | 説明 | |
---|---|---|
items | List<EzLayerModel> | レイヤーのリスト |
実装例
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
var items = await domain.LayerModelsAsync(
).ToListAsync();
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
var it = domain.LayerModels(
);
List<EzLayerModel> items = new List<EzLayerModel>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
}
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
)->AreaModel(
"area-0001" // areaModelName
);
const auto It = Domain->LayerModels(
);
TArray<Gs2::UE5::MegaField::Model::FEzLayerModelPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}
値の変更イベントハンドリング
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeLayerModels(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeLayerModels(callbackId);
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
);
var it = domain.LayerModels(
);
List<EzLayerModel> items = new List<EzLayerModel>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
}
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
)->AreaModel(
"area-0001" // areaModelName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeLayerModels(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeLayerModels(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
getLayerModel
エリアモデルを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
areaModelName | string | ✓ | ~ 128文字 | エリアモデル名 | |
layerModelName | string | ✓ | ~ 128文字 | レイヤーモデル名 |
Result
型 | 説明 | |
---|---|---|
item | EzLayerModel |
実装例
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
).LayerModel(
layerModelName: "layer-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
).LayerModel(
layerModelName: "layer-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
)->AreaModel(
"area-0001" // areaModelName
)->LayerModel(
"layer-0001" // layerModelName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
).LayerModel(
layerModelName: "layer-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).AreaModel(
areaModelName: "area-0001"
).LayerModel(
layerModelName: "layer-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
)->AreaModel(
"area-0001" // areaModelName
)->LayerModel(
"layer-0001" // layerModelName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::MegaField::Model::FLayerModel> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
update
座標を送信
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
areaModelName | string | ✓ | ~ 128文字 | エリア名 | |
layerModelName | string | ✓ | ~ 128文字 | レイヤー名 | |
position | EzMyPosition | ✓ | 自分の位置情報 | ||
scopes | List<EzScope> | ~ 10 items | 他プレイヤーの取得範囲リスト | ||
accessToken | string | ✓ | ~ 128文字 | ユーザーID |
Result
型 | 説明 | |
---|---|---|
items | List<EzSpatial> | 物体リスト |
実装例
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Spatial(
areaModelName: "area-0001",
layerModelName: "layer-0001"
);
var result = await domain.UpdateAsync(
position: ,
scopes: null
);
var item = await result.ModelAsync();
var domain = gs2.MegaField.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Spatial(
areaModelName: "area-0001",
layerModelName: "layer-0001"
);
var future = domain.UpdateFuture(
position: ,
scopes: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.Model();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
const auto Domain = Gs2->MegaField->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Spatial(
"area-0001", // areaModelName
"layer-0001" // layerModelName
);
const auto Future = Domain->Update(
// position
// scopes
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();