プレイヤーのインベントリ
PlayerInventory
名前空間のメソッドを使用して、プレイヤーのインベントリインスタンスの取得と更新を行うことができます。
これらのメソッドは、Authentication SDK から、現在サインインしているプレイヤーのインベントリデータを返します。
この名前空間のすべてのメソッドは、EconomyException をスローする可能性があります。
GetInventoryAsync
現在サインインしているプレイヤーに関連付けられている現在のインベントリアイテムインスタンスを取得します。
このメソッドには GetInventoryOptions
オブジェクトを任意で指定できます。これを使用して、フェッチごとのアイテム数やフィルタリングでのアイテム数を設定できます。
設定アイテム ID または PlayersInventoryItem
ID (あるいは両方) のリストを使用して、インベントリアイテムをフィルター処理できます。これらのフィルターオプションを使用すると、指定した設定アイテム ID と PlayersInventoryItem
ID のプレイヤーアイテムのみが返されます。
以下のサンプルコードは、現在のユーザーの最初の 5 個のアイテムを取得してから、次の 5 個を取得します。
C#
// Optional, defaults to 20
GetInventoryOptions options = new GetInventoryOptions
{
ItemsPerFetch = 5
};
GetInventoryResult inventoryResult = await EconomyService.Instance.PlayerInventory.GetInventoryAsync(options);
List<PlayersInventoryItem> firstFiveItems = inventoryResult.PlayersInventoryItems;
// do something with your items
if (inventoryResult.HasNext) {
inventoryResult = await inventoryResult.GetNextAsync(5);
List<PlayersInventoryItem> nextFiveItems = inventoryResult.PlayersInventoryItems;
// do something with your items
}
次に示すこのサンプルコードは、プレイヤーの SWORD
アイテムのみを取得します。
C#
GetInventoryOptions options = new GetInventoryOptions
{
InventoryItemIds = new List<string>() { "SWORD" }
};
GetInventoryResult inventoryResult = await EconomyService.Instance.PlayerInventory.GetInventoryAsync(options);
List<PlayersInventoryItem> listOfItems = inventoryResult.PlayersInventoryItems;
// ... etc
これらのメソッドは GetInventoryResult
を返します。
GetInventoryOptions
GetInventoryAsync
呼び出しの任意のオブジェクト。これには以下のフィールドがあります。
PlayersInventoryItemIds
: 文字列のリスト。デフォルトはnull
です。取得しようとするプレイヤーのインベントリにあるアイテムのPlayersInventoryItem
ID。InventoryItemIds
: 文字列のリスト。デフォルトはnull
です。取得しようとするアイテムの設定 ID。ItemsPerFetch
: 整数。デフォルトは 20 です。これを使用して、呼び出しごとにフェッチするアイテムの最大件数を 1 から 100 の間で設定します。
GetInventoryResult
GetInventoryResult
を使用すると、取得したプレイヤーのインベントリアイテムのリストをページで区切ってアクセスできるようになります。これには以下のフィールドがあります。
PlayersInventoryItems
: 現在フェッチされたアイテムが含まれるList<PlayersInventoryItem>
。
これには以下のメソッドがあります。
GetNextAsync(int itemsToFetch = 20)
: このメソッドは、より多くの結果を非同期でフェッチします。これには 1 つの任意のパラメーターがあり、フェッチされる結果の数を制限できます (1 から 100 を設定でき、デフォルトは 20 です)。これによって新しい結果が返され、元のアイテムと新しくフェッチされたアイテムの両方がPlayersInventoryItems
リストに含められます。それ以上フェッチする結果がなくなると、結果はnull
になります。
AddInventoryItemAsync
プレイヤーのインベントリにアイテムを追加します。
このメソッドには AddInventoryItemOptions
オブジェクトを任意で指定できます。これを使用してカスタムの PlayersInventoryItemId
を設定できます。null
の場合、自動生成されます。インスタンスデータのディクショナリを設定するためにも使用できます。
プレイヤーのインベントリに追加されたインベントリアイテムを表す PlayersInventoryItem
を返します。
C#
Dictionary<string, object> instanceData = new Dictionary<string, object>
{
{ "rarity", "purple" }
};
AddInventoryItemOptions options = new AddInventoryItemOptions
{
PlayersInventoryItemId = "customID",
InstanceData = instanceData
};
PlayersInventoryItem createdInventoryItem = await EconomyService.Instance.PlayerInventory.AddInventoryItemAsync("SWORD", options);
AddInventoryItemOptions
AddInventoryItemAsync
呼び出しの任意のオブジェクト。これには以下のフィールドがあります。
PlayersInventoryItemId
: 文字列。デフォルトはnull
です。作成されるPlayersInventoryItem
の ID を設定します。指定されない場合は生成されます。InstanceData
:Dictionary<string, object>
。インスタンスデータ のディクショナリを設定するために使用されます。
DeletePlayersInventoryItemAsync
プレイヤーのインベントリからアイテムを削除します。
このメソッドには、書き込みロックの設定に使用される DeletePlayersInventoryItemOptions
オブジェクトを任意で指定できます。書き込みロックが指定されても、アイテムが削除されるのは Economy サービスが書き込みロックを受け入れた場合のみです。書き込みロックが指定されない場合、操作は強制的に行われます。
C#
DeletePlayersInventoryItemOptions options = new DeletePlayersInventoryItemOptions
{
WriteLock = "writeLock"
};
EconomyService.Instance.PlayerInventory.DeletePlayersInventoryItemAsync("playersInventoryItemID", options);
DeletePlayersInventoryItemOptions
DeletePlayersInventoryItemAsync
呼び出しの任意のオブジェクト。これには以下のフィールドがあります。
WriteLock
: 文字列。デフォルトはnull
です。これを使用して、楽観的コンカレンシーのための書き込みロックを設定します。書き込みロック を参照してください。
UpdatePlayersInventoryItemAsync
アイテムを新しいインスタンスデータで更新します。
更新されたプレイヤーインベントリアイテムを返します。
このメソッドには、書き込みロックの設定に使用される UpdatePlayersInventoryItemOptions
オブジェクトを任意で指定できます。書き込みロックが指定されても、アイテムが更新されるのは Economy サービスが書き込みロックを受け入れた場合のみです。書き込みロックが指定されない場合、操作は強制的に行われます。
C#
Dictionary<string, object> instanceData = new Dictionary<string, object>
{
{ "rarity", "purple" }
};
UpdatePlayersInventoryItemOptions options = new UpdatePlayersInventoryItemOptions
{
WriteLock = writeLock
};
PlayersInventoryItem playersInventoryItem = await EconomyService.Instance.PlayerInventory.UpdatePlayersInventoryItemAsync("playersInventoryItemID", instanceData, options);
UpdatePlayersInventoryItemOptions
UpdatePlayersInventoryItemAsync
呼び出しの任意のオブジェクト。これには以下のフィールドがあります。
WriteLock
: 文字列。デフォルトはnull
です。これを使用して、楽観的コンカレンシーのための書き込みロックを設定します。書き込みロック を参照してください。
PlayersInventoryItem
PlayersInventoryItem
は、プレイヤーのインベントリ内の 1 つの一意のアイテムを表します。以下のフィールドが含まれます。
PlayersInventoryItemId
: プレイヤーのインベントリ内のこの一意インベントリアイテムの ID。InstanceItemId
: このインベントリアイテムの設定 ID。InstanceData
: このプレイヤーインベントリアイテムに関連付けられているインスタンスデータ。InstanceDataDeserializable
: このプレイヤーインベントリアイテムにIDeserializable
として関連付けられているインスタンスデータ。InstanceDataDeserializable の使用 を参照してください。WriteLock
: このプレイヤーのインベントリアイテムの現在のwritelock
文字列。Created
: このプレイヤーのインベントリアイテムが作成された日付。これは EconomyDate オブジェクトです。Modified
: このプレイヤーのインベントリアイテムが変更された日付。これは EconomyDate オブジェクトです。
また、以下のヘルパーメソッドがあります。
GetItemDefinitionAsync
このメソッドは、このプレイヤーのインベントリアイテムの設定 (タイプ InventoryItemDefinition
) をフェッチします。
C#
PlayersInventoryItem playersInventoryItem = // ... fetch the players inventory item
InventoryItemDefinition itemDefinition = playersInventoryItem.GetItemDefinitionAsync();
PlayersInventoryItemUpdated
このイベントをサブスクライブすると、SDK がプレイヤーのインベントリの特定のアイテムを更新したときに通知を受け取ることができます。サブスクライバーには、更新されたアイテムの playersInventoryItem
ID が渡されます。
このイベントは、SDK が開始したアクション (例えば、プレイヤーのインベントリの更新や購入) についてのみ呼び出されます。他のデバイス/サービス側の変更による更新については呼び出されません。
C#
EconomyService.Instance.PlayerInventory.PlayersInventoryItemUpdated += playersInventoryItemID => {
Debug.Log($"The players inventory item that was updated was {playersInventoryItemID}");
};
InstanceDataDeserializable の使用
InstanceDataDeserializable
を使用して、プレイヤーのインベントリの特定のアイテムにカスタムデータを追加します。これは、タイプ object
として渡され、タイプ IDeserializable
としてフェッチされます。これを使用して、独自のカスタムクラスをインスタンスデータとして渡すことができます。
例えば、プレイヤーの盾に耐久性レーティングを設定できます。これは InstanceDataDeserializable
を使用して設定および更新できます。
C#
class MyInstanceData
{
public int Durability;
public string Rarity;
}
MyInstanceData myInstanceData = new MyInstanceData() { Durability = 100, Rarity = "purple"};
PlayersInventoryItem updatedItem = await EconomyService.Instance.PlayerInventory.UpdatePlayersInventoryItemAsync("playersInventoryItemId", myInstanceData);
以下を実行してインスタンスデータをデシリアライズできます。
C#
MyInstanceData fetchedInstanceData = updatedItem.InstanceData.GetAs<MyInstanceData>();
int durability = fetchedInstanceData.Durability;
string rarity = fetchedInstanceData.Rarity;