プレイヤーのインベントリ

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;