> For the complete documentation index, see [llms.txt](/llms.txt)

# Inventory(GS2 UIKit for Unity) のサンプル

GS2 UIKit for Unity を使用した GS2-Inventory の機能実装サンプルの紹介



インベントリ機能を実装します。

## リポジトリ

https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Inventory

## GS2-Deploy テンプレート

https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Inventory/initialize_inventory_template.yaml

## プロジェクト内容

![img.png](img.png)

プロジェクトを開くと上記の通りになります。

![img_1.png](img_1.png)

実行すると、右上にインベントリの容量の使用状況が表示され、下部にインベントリの操作ボタンが表示されます。

![img_2.png](img_2.png)

「Acquire Potion」をクリックします。

![img_3.png](img_3.png)

すると、ポーションを10個入手することができ、画面上部にポーションが表示されます。
同じように、次はエーテルを入手するために「Acquire Ether」をクリックします。

![img_4.png](img_4.png)

ポーションの隣に、エーテルが追加されます。
ちなみに、右上のインベントリの使用量も 2/10 になっています。

次に、ポーションの最大スタック数は 99個 に設定されていますので「Acquire Potion」をあと9回クリックして100個持っている状態にしてみます。

![img_5.png](img_5.png)

このように、ポーションが2スタックに別れて、インベントリの使用量も 3/10 になりました。

ポーションやエーテルのアイコンをクリックすることで、アイテムを消費することができます。
99個スタックされているポーションをクリックしてみましょう。

![img_6.png](img_6.png)

アイテムはスタックを明示的に指定して消費することができ、その場合詰める処理はありませんので
98個スタックされたポーションと 1個スタックされたポーションになります。

次は 1個スタックされているポーションをクリックしてみます。

![img_7.png](img_7.png)

このように、スタックの総数が2個になり、インベントリの消費量も 2/10 になりました。

## プロジェクトの解説

![img_8.png](img_8.png)

シーンのヒエラルキーに注目してください。

### Canvas/InventoryWindow

![img_9.png](img_9.png)

**Gs2InventoryOwnInventoryContext**

この GameObject 以下のノードで取り扱う GS2-Inventory のインベントリ（スタンダード）を指定しています。

![img_11.png](img_11.png)
![img_10.png](img_10.png)

今回は、GS2-Inventory の inventory-0001 というネームスペースの Bag というインベントリを指定しています。

### Canvas/InventoryWindow/Capacity

![img_12.png](img_12.png)

**Gs2InventoryInventoryEnabler**

Gs2InventoryOwnInventoryContext で指定したインベントリの読み込みが終わると InventoryCapacityText GameObject が有効になります。

### Canvas/InventoryWindow/Capacity/InventoryCapacityText

![img_13.png](img_13.png)

**Gs2InventoryInventoryLabel**

現在のインベントリ使用量/現在のインベントリの最大量 を Format に指定しています。
整形されたテキストは OnUpdate(String) にコールバックされ、そこから Text コンポーネントに値を反映しています。

### Canvas/InventoryWindow/Inventory/.../Content

![img_15.png](img_15.png)

**Gs2InventoryOwnItemSetListFetcher**

Gs2InventoryOwnInventoryContext で指定されたネームスペースのアイテム一覧を取得します。

**Gs2InventoryOwnItemSetList**

Gs2InventoryOwnItemSetListFetcher で取得したアイテムを指定されたプレハブに割り当てて生成します。
Maximum Items にはプレハブを生成する最大数を指定します。

![img_14.png](img_14.png)

今回は子ノードにいる Item をプレハブとして指定しています。
フレハブとして指定された GameObject がシーン内にある場合、その GameObject は無効化され、それ以外に Maximum Items で指定された数だけ GameObject が生成されます。

### Canvas/InventoryWindow/Inventory/.../Content/Item

![img_16.png](img_16.png)

**Gs2InventoryOwnItemSetContext**

この GameObject 以下のノードで取り扱うアイテムを指定しています。
コンテキストの内容は Gs2InventoryOwnItemSetList によって割り当てられます。

**Gs2InventoryItemModelFetcher**

Gs2InventoryOwnItemSetContext で指定されたアイテムモデルを取得します。

**Gs2InventoryOwnItemSetFetcher**

Gs2InventoryOwnItemSetContext で指定されたアイテムを取得します。

### Canvas/InventoryWindow/Inventory/.../Content/Item/Icon

![img_18.png](img_18.png)

**Gs2InventoryItemModelNameEnabler**

割り当てられたアイテムモデルの名前で有効化する GameObject を切り替えます。
Potion の場合は PotionImage を有効化し、Ether の場合は EnterImage を有効化しています。
その結果、リスト表示するアイテムの種類によってアイテムのアイコンが変わります。

### Canvas/InventoryWindow/Inventory/.../Content/Item/Name

![img_19.png](img_19.png)

**Gs2InventoryItemModelLabel**

割り当てられたアイテムモデルの内容を、Format で指定した形式で整形します。
整形されたテキストは OnUpdate(String) にコールバックされ、そこから Text コンポーネントに値を反映しています。

### Canvas/InventoryWindow/Inventory/.../Content/Item/Count

![img_20.png](img_20.png)

**Gs2InventoryOwnItemSetLabel**

割り当てられたアイテムセットの内容を、Format で指定した形式で整形します。
整形されたテキストは OnUpdate(String) にコールバックされ、そこから Text コンポーネントに値を反映しています。

### Canvas/InventoryWindow/Inventory/.../Content/Item/Use/Gs2InventoryItemSetConsumeAction

![img_21.png](img_21.png)

こちらのコンテキストメニューよりプレハブを追加できます。

**Gs2InventoryItemSetConsumeAction**

Consume Count で消費する数量を指定できます。

プレハブを有効化することで Gs2InventoryOwnItemSetContext で指定したアイテムを消費します。

### Canvas/InventoryWindow/Input/Acquire Potion

![img_22.png](img_22.png)

**Gs2ExchangeRateModelContext**

GS2-Inventory の Potion を入手する GS2-Exchange の交換レートを設定します。

![img_24.png](img_24.png)
![img_23.png](img_23.png)

ここでは、GS2-Exchange の exchange-0001 という名前のネームスペース の Potion という名前の交換レートを指定しています。

### Canvas/InventoryWindow/Input/Acquire Potion/Gs2ExchangeExchangeExchangeAction

**Gs2ExchangeExchangeExchangeAction**

Count で交換する数量を指定できます。

プレハブを有効化することで Gs2ExchangeRateModelContext で指定した交換を実行します。

### Canvas/InventoryWindow/Input/Acquire Ether

**Gs2ExchangeRateModelContext**

![img_25.png](img_25.png)

GS2-Inventory の Ether を入手する GS2-Exchange の交換レートを設定します。

![img_27.png](img_27.png)
![img_26.png](img_26.png)

ここでは、GS2-Exchange の exchange-0001 という名前のネームスペース の Potion という名前の交換レートを指定しています。

### Canvas/InventoryWindow/Input/Acquire Ether/Gs2ExchangeExchangeExchangeAction

![img_28.png](img_28.png)

**Gs2ExchangeExchangeExchangeAction**

Count で交換する数量を指定できます。

プレハブを有効化することで Gs2ExchangeRateModelContext で指定した交換を実行します。

### Process/Gs2AutoLogin

ログイン処理を実行するプレハブが設定されています。

[Accountのサンプル]() で解説していますので、そちらを参照ください。




