# 設定

> Retrieve your Economy configuration using the Configuration namespace.

`Configuration` 名前空間のメソッドを使用すると、グローバル Economy 設定からアイテムを取得できます。

> **Note:**
>
> [設定のキャッシュ](../config-caching) を参照してください。

`SyncConfigurationAsync()` は、Economy 設定の最新バージョンをキャッシュします。この後で、`GetCurrencies()` のようなメソッドを呼び出すと、キャッシュから設定を読み取ることができます。新しい設定を公開する場合は、`SyncConfigurationAsync()` を再び呼び出してキャッシュを更新する必要があります。

### SyncConfigurationAsync##syncconfigurationasync

現在公開されている Economy 設定を取得し、SDK にキャッシュします。他の設定メソッド (例えば `GetCurrencies()`) を呼び出す前にこのメソッドを呼び出す必要があります。そうしないと、例外がスローされます。

```cs title="C#"
await EconomyService.Instance.Configuration.SyncConfigurationAsync();
```

## 通貨##currencies

### GetCurrencies##getcurrencies

キャッシュした設定からすべての通貨を取得します。`CurrencyDefinition` オブジェクトのリストを返します。

```cs title="C#"
List<CurrencyDefinition> definitions = EconomyService.Instance.Configuration.GetCurrencies();
```

### GetCurrency##getcurrency

キャッシュした設定から、通貨 ID を使用して特定の `CurrencyDefinition` を取得します。通貨が存在しない場合は、`null` を返します。

```cs title="C#"
string currencyID = "GOLD_BARS";
CurrencyDefinition goldCurrencyDefinition = EconomyService.Instance.Configuration.GetCurrency(currencyID);
```

### CurrencyDefinition##currencydefinition

`CurrencyDefinition` オブジェクトは 1 つの通貨設定を表し、以下のデータを含みます。

* `Id`: 通貨 ID。
* `Name`: 人間が判読できる通貨名。
* `Type`: Economy ダッシュボードで定義されているアイテムの種類 (すべての `CurrencyDefinition` オブジェクトでこれは `CURRENCY` です)。
* `Initial`: プレイヤーに最初に与えられる通貨の金額。
* `Max`: (任意。値 0 は最大値なし) プレイヤーが所有できる通貨の最大金額。
* `CustomData`: `Dictionary<string, object>` として、この通貨定義に関連付けられているカスタムデータ ([CustomDataDeserializable の使用](#using-customdata) を参照してください)。
* `Created`: この通貨が作成された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。
* `Modified`: この通貨が変更された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。

また、以下の便利なメソッドもあります。

#### GetPlayerBalance##c

このメソッドは、`CurrencyDefinition` に指定されている通貨について、現在サインインしているプレイヤーの残高を取得します。これは、[プレイヤーの残高](./player-balances.md) に指定されている `PlayerBalance` を返します。

```cs title="C#"
string currencyID = "GOLD_BARS";
CurrencyDefinition goldCurrencyDefinition = EconomyService.Instance.Configuration.GetCurrency(currencyID);
PlayerBalance playersGoldBarBalance = await goldCurrencyDefinition.GetPlayerBalanceAsync();
```

## インベントリ##inventories

### GetInventoryItems##getinventoryitems

キャッシュした設定からすべてのインベントリアイテムを取得します。`InventoryItemDefinition` オブジェクトのリストを返します。

```cs title="C#"
List<InventoryItemDefinition> definitions = EconomyService.Instance.Configuration.GetInventoryItems();
```

### GetInventoryItem##getinventoryitem

キャッシュした設定から、アイテム ID を使用して特定の `InventoryItemDefinition` を取得します。アイテムが存在しない場合は、`null` を返します。

```cs title="C#"
string itemID = "SWORD";
InventoryItemDefinition definition = EconomyService.Instance.Configuration.GetInventoryItem(itemID);
```

### InventoryItemDefinition##inventoryitemdefinition

`InventoryItemDefinition` オブジェクトは 1 つのインベントリアイテム設定を表し、以下のデータを含みます。

* `Id`: インベントリアイテム ID。
* `Name`: 人間が判読できる名前。
* `Type`: Economy ダッシュボードで定義されているアイテムの種類 (すべての `InventoryItemDefinition` オブジェクトでこれは `INVENTORY_ITEM` です)。
* `CustomData`: `Dictionary<string, object>` として、このアイテム定義に関連付けられているカスタムデータ ([](#using-customdata)[CustomDataDeserializable の使用](#using-customdata) を参照してください)。
* `Created`: このアイテムが作成された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。
* `Modified`: このアイテムが変更された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。

また、以下のヘルパーメソッドがあります。

### GetAllPlayersInventoryItems##getallplayersinventoryitems

現在サインインしているプレイヤーについて、プレイヤーのインベントリアイテムすべてを取得します。[プレイヤーのインベントリ](./player-inventory.md) に定義されている `GetInventoryResult` を返します。

```cs title="C#"
string itemID = "SWORD";
InventoryItemDefinition definition = EconomyService.Instance.Configuration.GetInventoryItem(itemID);
GetInventoryResult allThePlayersSwords = await definition.GetAllPlayersInventoryItemsAsync();
```

## 購入##purchases

### 仮想購入##virtual-purchases

#### GetVirtualPurchases##c

キャッシュした設定からすべての仮想購入を取得します。`VirtualPurchaseDefinition` オブジェクトのリストを返します。

```cs title="C#"
List<VirtualPurchaseDefinition> definitions = EconomyService.Instance.Configuration.GetVirtualPurchases();
```

#### GetVirtualPurchase##c

キャッシュした設定から 1 つの仮想購入を取得します。1 つの `VirtualPurchaseDefinition` オブジェクトを返します。

```cs title="C#"
string purchaseId = "VIRTUAL_PURCHASE_ID"
VirtualPurchaseDefinition definition = EconomyService.Instance.Configuration.GetVirtualPurchase(purchaseId);
```

#### VirtualPurchaseDefinition##getplayerbalance

`VirtualPurchaseDefinition` オブジェクトは、設定における仮想購入の定義を表します。これは、以下に示すいくつかのコンポーネントオブジェクトで構成されています。

`VirtualPurchaseDefinition` には以下のフィールドがあります。

* `Id`: 購入定義 ID。
* `Name`: 人間が判読できる名前。
* `Type`: Economy ダッシュボードで定義されているアイテムの種類 (すべての `VirtualPurchaseDefinition` オブジェクトでこれは `VIRTUAL_PURCHASE` です)。
* `CustomData`: `Dictionary<string, object>` として、この購入定義に関連付けられているカスタムデータ ([](#using-customdata)[CustomDataDeserializable の使用](#using-customdata) を参照してください)。
* `CustomDataDeserializable`: `IDeserializable` として、この購入定義に関連付けられているカスタムデータ ([CustomDataDeserializable の使用](#using-customdata) を参照してください)。
* `Created`: この購入定義が作成された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。
* `Modified`: この購入定義が変更された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。
* `Costs`: [`PurchaseItemQuantity`](#purchaseitemquantity) として、この購入に関連付けられているコストのリスト。
* `Rewards`: [`PurchaseItemQuantity`](#purchaseitemquantity) として、この購入に関連付けられているゲーム内報酬のリスト。

### リアルマネーでの購入##real-money-purchases

> **Warning:**
>
> Economy SDK 3.0.0 には、`GetRealMoneyPurchase())`/`GetRealMoneyPurchases()` メソッドから `StoreIdentifiers` が返されないという問題があります。推奨される有効な事例として、開発者は、問題が解決されるまでバージョン 2.0.4 の SDK に戻すことで問題を回避できます。

#### GetRealMoneyPurchases##c

キャッシュした設定からリアルマネーでの購入をすべて取得します。`RealMoneyPurchaseDefinition` オブジェクトのリストを返します。

```cs title="C#"
List<RealMoneyPurchaseDefinition> definitions = EconomyService.Instance.Configuration.GetRealMoneyPurchases();
```

#### GetRealMoneyPurchase##c

キャッシュした設定から 1 つのリアルマネーでの購入を取得します。1 つの `RealMoneyPurchaseDefinition` オブジェクトを返します。

```cs title="C#"
string purchaseId = "REAL_MONEY_PURCHASE_ID"
RealMoneyPurchaseDefinition definition = EconomyService.Instance.Configuration.GetRealMoneyPurchase(purchaseId);
```

#### RealMoneyPurchaseDefinition##c

`RealMoneyPurchaseDefinition` オブジェクトは、設定におけるリアルマネーでの購入の定義を表します。これは、以下に示すいくつかのコンポーネントオブジェクトで構成されています。

`RealMoneyPurchaseDefinition` には以下のフィールドがあります。

* `Id`: 購入定義 ID。
* `Name`: 人間が判読できる名前。
* `Type`: Economy ダッシュボードで定義されているアイテムの種類 (すべての `RealMoneyPurchaseDefinition` オブジェクトでこれは `MONEY_PURCHASE` です)。
* `CustomData`: `Dictionary<string, object>` として、この購入定義に関連付けられているカスタムデータ ([](#using-customdata)[CustomDataDeserializable の使用](#using-customdata) を参照してください)。
* `Created`: この購入定義が作成された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。
* `Modified`: この購入定義が変更された日付。これは [EconomyDate](./common-objects.md#economydate) オブジェクトです。
* `StoreIdentifiers`: この購入のストア識別子。これは [StoreIdentifiers](#getvirtualpurchases) オブジェクトです。
* `Rewards`: [`PurchaseItemQuantity`](#purchaseitemquantity) として、この購入に関連付けられているゲーム内報酬のリスト。

#### StoreIdentifiers##getvirtualpurchases

`StoreIdentifers` オブジェクトには、Google と Apple 両方のストア識別子が含まれます。[Unity Dashboard](https://dashboard.unity3d.com/) の Store connection (ストア接続) のステップで購入を作成するときにこれらが設定されます。Unity Dashboard で購入をクリックして Store connection (ストア接続) にスクロールダウンすると、これらを編集できます。

## PurchaseItemQuantity##purchaseitemquantity

`PurchaseItemQuantity` は、購入に関連付けられている通貨の金額/インベントリアイテム数を表します。それぞれが 1 つの通貨/インベントリアイテムタイプ (例えば、4 本の剣、10 ゴールド) に関連します。これには以下のフィールドがあります。

* `Item`: この数量によって表されるアイテム定義を示す `EconomyReference`。
* `Amount`: 表されるアイテムの数量 (整数)。

### EconomyReference##economyreference

`EconomyReference` は、購入内からもう 1 つの定義へのリファレンスです。これには 1 つのメソッドがあります。

* `GetReferencedConfigurationItem()` は、関連付けられているアイテムをフェッチします。

この方法でのリファレンスアイテムの取得は、さらにネットワークリクエストをする必要ないため、同期して行われます。購入が取得された時点でのリファレンスアイテムが取得されます (購入をフェッチしてから、このリファレンスにアクセスするまでに定義に対して変更が行われたとしても、リファレンスアイテムに反映されません)。

## CustomDataDeserializable の使用##using-customdata

カスタムデータは [Unity Dashboard](https://dashboard.unity3d.com/) で設定されます。通貨、インベントリアイテム、または購入を選択し、**Custom data** (カスタムデータ) に移動して、データを JSON 形式で追加します。

カスタムデータは、フェッチされた設定アイテムの `CustomDataDeserializable` に格納されます。タイプは `IDeserializable` です。これを使用すると、アイテムのカスタムデータを独自のカスタムクラスにデシリアライズできます。

例えば、色で希少性を表すシステムがゲームにある場合、アイテムの JSON コードはダッシュボードで以下のようになります。

```js title="JSON"
{
    "rarity": "purple"
}
```

以下を使用してインスタンスデータをデシリアライズできます。

```cs title="C#"
class MyCustomData{
    public string Rarity
}
MyCustomData fetchedCustomData = fetchedConfigItem.CustomDataDeserializable.GetAs<MyCustomData>();
string rarity = fetchedCustomData.Rarity;
```
