Inventory(GS2 UIKit for Unity) のサンプル
インベントリ機能を実装します。
リポジトリ
https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Inventory
GS2-Deploy テンプレート
プロジェクト内容
プロジェクトを開くと上記の通りになります。
実行すると、右上にインベントリの容量の使用状況が表示され、下部にインベントリの操作ボタンが表示されます。
「Acquire Potion」をクリックします。
すると、ポーションを10個入手することができ、画面上部にポーションが表示されます。 同じように、次はエーテルを入手するために「Acquire Ether」をクリックします。
ポーションの隣に、エーテルが追加されます。 ちなみに、右上のインベントリの使用量も 2/10 になっています。
次に、ポーションの最大スタック数は 99個 に設定されていますので「Acquire Potion」をあと9回クリックして100個持っている状態にしてみます。
このように、ポーションが2スタックに別れて、インベントリの使用量も 3/10 になりました。
ポーションやエーテルのアイコンをクリックすることで、アイテムを消費することができます。 99個スタックされているポーションをクリックしてみましょう。
アイテムはスタックを明示的に指定して消費することができ、その場合詰める処理はありませんので 98個スタックされたポーションと 1個スタックされたポーションになります。
次は 1個スタックされているポーションをクリックしてみます。
このように、スタックの総数が2個になり、インベントリの消費量も 2/10 になりました。
プロジェクトの解説
シーンのヒエラルキーに注目してください。
Canvas/InventoryWindow
Gs2InventoryOwnInventoryContext
この GameObject 以下のノードで取り扱う GS2-Inventory のインベントリ(スタンダード)を指定しています。
今回は、GS2-Inventory の inventory-0001 というネームスペースの Bag というインベントリを指定しています。
Canvas/InventoryWindow/Capacity
Gs2InventoryInventoryEnabler
Gs2InventoryOwnInventoryContext で指定したインベントリの読み込みが終わると InventoryCapacityText GameObject が有効になります。
Canvas/InventoryWindow/Capacity/InventoryCapacityText
Gs2InventoryInventoryLabel
現在のインベントリ使用量/現在のインベントリの最大量 を Format に指定しています。 整形されたテキストは OnUpdate(String) にコールバックされ、そこから Text コンポーネントに値を反映しています。
Canvas/InventoryWindow/Inventory/…/Content
Gs2InventoryOwnItemSetListFetcher
Gs2InventoryOwnInventoryContext で指定されたネームスペースのアイテム一覧を取得します。
Gs2InventoryOwnItemSetList
Gs2InventoryOwnItemSetListFetcher で取得したアイテムを指定されたプレハブに割り当てて生成します。 Maximum Items にはプレハブを生成する最大数を指定します。
今回は子ノードにいる Item をプレハブとして指定しています。 フレハブとして指定された GameObject がシーン内にある場合、その GameObject は無効化され、それ以外に Maximum Items で指定された数だけ GameObject が生成されます。
Canvas/InventoryWindow/Inventory/…/Content/Item
Gs2InventoryOwnItemSetContext
この GameObject 以下のノードで取り扱うアイテムを指定しています。 コンテキストの内容は Gs2InventoryOwnItemSetList によって割り当てられます。
Gs2InventoryOwnItemModelFetcher
Gs2InventoryOwnItemSetContext で指定されたアイテムモデルを取得します。
Gs2InventoryOwnItemSetFetcher
Gs2InventoryOwnItemSetContext で指定されたアイテムを取得します。
Canvas/InventoryWindow/Inventory/…/Content/Item/Icon
Gs2InventoryItemModelNameEnabler
割り当てられたアイテムモデルの名前で有効化する GameObject を切り替えます。 Potion の場合は PotionImage を有効化し、Ether の場合は EnterImage を有効化しています。 その結果、リスト表示するアイテムの種類によってアイテムのアイコンが変わります。
Canvas/InventoryWindow/Inventory/…/Content/Item/Name
Gs2InventoryItemModelLabel
割り当てられたアイテムモデルの内容を、Format で指定した形式で整形します。 整形されたテキストは OnUpdate(String) にコールバックされ、そこから Text コンポーネントに値を反映しています。
Canvas/InventoryWindow/Inventory/…/Content/Item/Count
Gs2InventoryItemSetLabel
割り当てられたアイテムセットの内容を、Format で指定した形式で整形します。 整形されたテキストは OnUpdate(String) にコールバックされ、そこから Text コンポーネントに値を反映しています。
Canvas/InventoryWindow/Inventory/…/Content/Item/Use/Gs2InventoryItemSetConsumeAction
こちらのコンテキストメニューよりプレハブを追加できます。
Gs2InventoryItemSetConsumeAction
Consume Count で消費する数量を指定できます。
プレハブを有効化することで Gs2InventoryOwnItemSetContext で指定したアイテムを消費します。
Canvas/InventoryWindow/Input/Acquire Potion
Gs2ExchangeRateModelContext
GS2-Inventory の Potion を入手する GS2-Exchange の交換レートを設定します。
ここでは、GS2-Exchange の exchange-0001 という名前のネームスペース の Potion という名前の交換レートを指定しています。
Canvas/InventoryWindow/Input/Acquire Potion/Gs2ExchangeExchangeExchangeAction
Gs2ExchangeExchangeExchangeAction
Count で交換する数量を指定できます。
プレハブを有効化することで Gs2ExchangeRateModelContext で指定した交換を実行します。
Canvas/InventoryWindow/Input/Acquire Ether
Gs2ExchangeRateModelContext
GS2-Inventory の Ether を入手する GS2-Exchange の交換レートを設定します。
ここでは、GS2-Exchange の exchange-0001 という名前のネームスペース の Potion という名前の交換レートを指定しています。
Canvas/InventoryWindow/Input/Acquire Ether/Gs2ExchangeExchangeExchangeAction
Gs2ExchangeExchangeExchangeAction
Count で交換する数量を指定できます。
プレハブを有効化することで Gs2ExchangeRateModelContext で指定した交換を実行します。
Process/Gs2AutoLogin
ログイン処理を実行するプレハブが設定されています。
Accountのサンプル で解説していますので、そちらを参照ください。