Unity

【Unity】Game Creator 2 Inventory(インベントリ)完全解説

【Unity】Game Creator 2 Inventory(インベントリ)完全解説

当サイトを閲覧いただきありがとうございます。

本記事では、Game Creator 2のモジュールのひとつである「Inventory」(インベントリ)について詳しく解説します。

Inventoryはアイテム定義/所持品(Bag)/装備(Equipment)/通貨(Currency)/商店(Merchant)/クラフト・解体(Tinker)/ドロップ(Loot Table)/ソケット・プロパティを包括的に扱う大規模な拡張アセットです。

公式ドキュメント:Game Creator 2 Documentation


Inventoryとは

ゲーム内で物品を扱うほぼすべての場面をまかなうモジュールです。

主要要素:

  • Item:アイテムの定義(ScriptableObject)
  • Runtime Item:シーンにある「そのアイテムの個別インスタンス」
  • Bag:Item/Runtime Itemを入れるコンテナ(コンポーネント)
  • Equipment:装備スロット定義(ScriptableObject)
  • Currency:通貨(ScriptableObject。Coinを複数持てる)
  • Merchant:商店コンポーネント
  • Tinker:クラフト/解体UIを開く
  • Loot Table:重み付き抽選ドロップ
  • Sockets / Properties:武器にルーンを挿したり、攻撃力などの可変値を持たせたり

ItemとRuntime Item

  • Item:プロジェクトに存在するテンプレート(Prefab的)。名前・重量・Propertiesのデフォルト値などを定義
  • Runtime Item:シーン上のインスタンス。独自のProperty値(例:剣ごとの耐久値)を持てる
  • セーブ/ロード対象:Runtime Itemは個別インスタンスとして保存される
  • Unityの「Prefab ↔ Prefab Instance」の関係に似ています

導入

  1. Asset Storeで Inventoryモジュール を購入
  2. Window > Package Manager からインストール
  3. Game Creator > Install... でサンプルをインストール:
    • Items:すぐ使えるテンプレアイテム群
    • UI:インベントリ/商店/クラフトUIテンプレ
    • Examples:機能ごとのチュートリアルシーン集
  4. ExamplesはItemsとUIの両方に依存。依存は自動解決されます

Items(アイテム定義)

作成

Project右クリック → Create > Game Creator > Inventory > Item

Itemのセクション構成

ID

一意の文字列です。複製するとエラー表示(赤)されます。右のフィールドを展開 → Regenerate で新IDを生成できます。

Prefab

ドロップ/インスタンス生成用のプレハブ参照です。未設定ならドロップ不可になります。

Inheritance(継承)

Parent に別Itemを指定するとProperty・Socketを継承します。

比較動作:AがBから継承しているとき、「AはBと等しいか」は true(Aは Bの下位)。「BはAと等しいか」は false になります。

Information

Name/Description/Sprite/Color。ローカライズ用の動的プロパティが使えます。

Shape

  • Width/Height:グリッド型Bagにおける占有面積
  • Weight:重量(最大重量と比較)
  • Max Stack:同一アイテムの最大積層数
  • Socketが1個でもあるとMax Stackは自動的に1に制限されます(技術的制約)

Price

Currency(1種類のみ指定可)と数値。装着中のSocketアイテムの価格も合算されます(例:剣45 + ルーン20 = 65)。

Properties

動的に変わるキー付きの値(例:attack = 35)。Icon/Color/Number/Textを持ちます。

Sockets

他Itemを差し込める口です。基準Item(Base Item)を指定します。

Equipping

装備可能Itemの設定です。EquipmentアセットとBagの組合せで動作します。

Usage

  • Consume on Use:使用で消費するか(ポーション ⇔ 笛)
  • Can Use(Conditions):使用条件。成功しないと使用不可
  • On Use(Instructions):使用時に実行。Self = BagのついたGameObjectTarget = BagのWearer
  • Execute From Parent:親ItemのCan Use/On Useを先に実行してから自分を実行可能(薬全般に共通の演出を親にまとめるパターン)

Crafting

レシピと解体で復元する材料の両方を定義可能です。


Properties(アイテム属性)

Propertyの追加

Add Property ボタンで追加します。ID(名前)/Is Hidden/Icon/Color/Number/Textを持ちます。

Mutable vs Immutable

  • Mutable(可変) はRuntime Itemで変化する値(耐久値・残弾など)
  • Immutable(不変) はゲーム中変わらない値

継承

Item上端の Inherit Properties トグルをONにすると親のPropertiesを引き継ぎます。左のトグルで個別に上書き値を設定可能です(例:Shield > Wooden Shield はdefenseを低く、Shield > Steel Shield は高く)。

Hidden Properties

UIに出さない内部フラグ用です(is-metal のような裏属性)。


Sockets(アイテム連結)

2つの役割

  • Socket Prefab:自分が他のItemのSocketに挿さるときの見た目(Propコンポーネントを持つPrefab)
  • Sockets(受け口):自分が他のItemを受け付ける口

受け口の設定

Add Socket ボタンで追加します。

  • Base Item:受け入れるItemの型。そこから派生した子も全部受け入れます(Runeを指定すればRune of Attack/Rune of DefenseもOK)
  • Socket ID:Propコンポーネントが挿入位置を識別するID

Propコンポーネント

Socketに差し込まれたPrefabを、自分の3Dモデル上の特定位置に自動で装着します。Socket IDごとに「挿入位置(子Transform)」を設定します。


Bags(所持品コンテナ)

種類

  • List Bag:順番に並べるリスト型(推奨。扱いやすい)
  • Grid Bag:グリッドに配置。形状のあるアイテムを敷き詰める(上級者向け)

Bag Options

  • Maximum Height:保持できるアイテム数の上限
  • Maximum Weight:超過すると Overloaded 扱い
    • Heightは超えられないが、Weightは超えても追加自体は可能
  • Equipment:Equipmentアセットへの参照(任意)

Stock / Wealth

  • Add Stock:Itemと数量の初期在庫(例:商人の初期アイテム)
  • Add Wealth:Currencyと初期所持額
  • ランダムロット(宝箱など)は Loot Table を推奨

Skin UI

Bagの UI表示用スキンです。用途(Playerの持ち物/宝箱/商店)ごとに切り替えます。

Wearer(装着者)

装備Itemを実際に身に付ける対象です。既定は Self(BagとCharacterが同一GameObject上にある場合)。


Equipment(装備)

Equipmentアセット

Project右クリック → Create > Game Creator > Inventory > Equipment

Equipment Slot

  • Base Item:受け入れるItemの型(例:Head という親Itemを基準にすれば、全ヘルメットが装備可)
  • Bone:装備を表示するボーン参照。Humanoidはドロップダウン、非Humanoidはパス指定

標準テンプレの例

同梱Equipmentには以下7スロットがあります:

  • Head/Body/Right Hand/Left Hand(装備)
  • Consumable 3つ(消耗品ホットバー)

Currencies(通貨)

Currencyアセット

Project右クリック → Create > Game Creator > Inventory > Currency

Coin複数対応

Currencyは1つ以上の Coin を持ちます。各Coinは「基準単位に対する相対値」です。

多くのゲームは 単一Coin(Gold 1)で十分です。小数不可のため、小数2桁欲しい場合は値×100で管理し表示時にシフトします。

複数Coinの例(銅・銀・金)

  • Copper = 1 → Silver = 25 → Gold = 125(= 5 Silver × 25 Copper)
  • ギブ・テイクは常に 基準値 に換算した数値で操作します

Merchants(商店)

Bag + Merchantコンポーネントを同じGameObjectに付けます。

Configuration

設定説明
Infinite Currency商人の通貨無限化(プレイヤーから買い取る時用)
Infinite Stock販売アイテムが減らない
Allow Buy Backプレイヤーが売った物を再入荷
Sell Niche Type販売対象Item型を絞る(Herbs専門など)
Buy Rate商人がプレイヤーに売る時の倍率(1.0 = 定価)
Sell Rate商人がプレイヤーから買う時の倍率(通常0.5で半値買い取り)

Tinkering(クラフト/解体)

概要

  • Crafting:複数アイテムから1つ作る
  • Dismantling:1つ解体して複数素材を回収
  • 開き方:Open Tinker UI 命令

パラメータ

  • Tinker Skin:クラフトか解体かを決めるスキン
  • Input Bag:材料を取るBag
  • Output Bag:生成物/素材を置くBag。通常同一だが分離も可能
  • Filter Item:対象Item型(AlchemyならPotion、ForgeならEquipment、のように絞る)

設計のヒント

ジャンル別ステーション(鍛冶/調合)の違いはFilter Itemの親Itemを変えるだけです。


Loot Tables(確率ドロップ)

作成

Project右クリック → Create > Game Creator > Inventory > Loot Table

エントリ設定

  • Rate:重み(確率ではなく相対値)。全体和に対する比率で抽選
  • Loot:ItemまたはCurrencyを選ぶ
  • Amount:固定 or ランダム数量
  • No Drop Rate:「何も出ない」確率のゲタ

実行

Instruction Loot Table → Loot Tableアセット+出力先Bagを指定します。1回の実行で1エントリを抽選。複数回連続実行することで「宝箱の中身を複数個生成」ができます。

宝箱の典型パターン

ChestプレハブにTrigger → Loot Table 命令を複数回実行 → Chest自身のBagに格納。これにより、レベル内の宝箱を全く同じPrefabなのに中身だけランダムにできます。


User Interface(UIコンポーネント群)

Skinの3種類

Skin種関連コンポーネント役割
Bag SkinBag UIBagの表示全体
Merchant SkinMerchant UI商店の取引画面
Tinker SkinTinker UIクラフト/解体画面

Bag UI

  • 2種類:Bag List UI(List Bag用)と Bag Grid UI(Grid Bag用)
  • パラメータ:
    • Prefab Cell:各セルのPrefab(Bag Cell UI コンポーネント必須)
    • Filter by Parent:表示するItem型フィルタ(タブに便利)
    • Content:セルPrefabを並べる親オブジェクト
    • Can Drop Outside:UI外へドラッグで世界にドロップ可能か
    • Max Drop Distance:ドロップ可能距離
    • Drop Amount:1つ/スタック全体

関連UIコンポーネント

コンポーネント役割
Cell UI各スロットのセル。ドラッグ可否・ドロップ時/選択時のInstructionを受ける
Selected Cell UI現在選択中のセルの詳細表示
Socket UI / Property UI対応するSocket/Property 1件を表示する子Prefab
Equip UIEquipmentスロット/消耗品ホットバーUI
Wealth UI所持通貨表示
Weight現在重量 / 最大重量の表示

Merchant UI

2つのBag UI(Merchant/Client)を橋渡しします。On Buy / On Sell(Player目線)にInstructionを割当可能です。

Tinker UI

レシピ/解体元リスト表示。Filter By Parent で対象Item型をフィルタします。


Visual Scripting リファレンス

Instructions(36)

Inventory > Bags(10)

命令機能
Add ItemItem型から新規生成してBagに追加
Add Runtime Item既存Runtime ItemをBagに追加
Remove Item指定Item型をBagから削除
Remove Runtime Item指定Runtime ItemをBagから削除
Drop ItemItem型をBagから世界に落とす
Drop Runtime ItemRuntime Itemを世界に落とす
Increment Bag HeightBagの行数を増やす
Increment Bag WidthBagの列数を増やす
Move Content To BagBagの全内容を別Bagに移す
Move Wealth To BagBagの全通貨を別Bagに移す

Inventory > Cooldowns(5)

命令機能
Add Item CooldownItem型にクールダウンを付ける
Add Runtime Item CooldownRuntime Itemにクールダウンを付ける
Reset Item CooldownItemのクールダウンをリセット
Reset Runtime Item CooldownRuntime Itemのクールダウンをリセット
Clear CooldownsBagの全クールダウンを削除

Inventory > Currency(1)

命令機能
Change CurrencyBagの通貨値を加減

Inventory > Equipment(4)

命令機能
Equip ItemItem型の中からBag内のアイテムを装備
Equip Runtime Item指定Runtime Itemを装備
Unequip ItemItem型の装備を解除
Unequip Runtime ItemRuntime Itemの装備を解除

Inventory > Loot(2)

命令機能
Instantiate ItemItemのPrefabをシーンに配置
Loot TableLoot Tableから1件抽選しBagへ

Inventory > Sockets(2)

命令機能
Attach Runtime Item最初の空きSocketにRuntime Itemを装着
Detach Runtime ItemSocketからRuntime Itemを取り外す

Inventory > UI(10)

命令機能
Open Bag UIBagのUIを開く
Close Bag UIBagのUIを閉じる
Open Merchant UI商店UIを開く
Close Merchant UI商店UIを閉じる
Open Tinker UIクラフト/解体UIを開く
Close Tinker UITinker UIを閉じる
Set Bag UIBag UIの対象Bagを差し替え
Set Drop Amountドロップ時の挙動切替
Set Split Amountスタック分割時の挙動切替
Set Transfer Amount移送時の挙動切替

Inventory > Variables(2)

命令機能
Set ItemItem型をVariableに保存
Set Runtime ItemRuntime ItemをVariableに保存

Conditions(24)

カテゴリ条件判定
InventoryCan Add指定ItemをBagに追加可能か
Has ItemBagに指定Itemが最低数量含まれているか
Has Runtime ItemBagに指定Runtime Itemがあるか
Is OverloadedBagの最大重量を超過しているか
Is Type Of ItemItemが別Itemと等価/下位か
Is UsableItemが使用可能か
BagsEnough SpaceBagに最低空き数があるか
CooldownsIs Item Cooldown指定Itemがクールダウン中か
Is Runtime Item Cooldown指定Runtime Itemがクールダウン中か
EquipmentCan Equip指定Itemを装備可能か
Is Equipment Slot Free指定スロットが空いているか
Is Equippable指定Itemが装備可能か(型として)
Is EquippedItem型の装備が行われているか
Is Runtime Item Equipped指定Runtime Itemが装備されているか
MerchantCan Buy指定ItemをMerchantから購入可能か
Can Sell指定ItemをMerchantに売却可能か
PropertiesItem Has PropertyItemが指定Propertyを持つか
Runtime Item Has PropertyRuntime Itemが指定Propertyを持つか
TinkerCan Craft指定Itemをクラフト可能か
Can Dismantle指定Itemを解体可能か
Enough Ingredientsクラフト材料が揃っているか
Is CraftableItemがクラフト定義を持つか
Is DismantableItemが解体定義を持つか
WealthCompare Wealth指定通貨の値が条件を満たすか

Events(17)

カテゴリイベント発火タイミング
InventoryOn AddBagにアイテムが追加されたとき
On RemoveBagからアイテムが削除されたとき
On Drop ItemBagのアイテムがTrigger上にドロップされたとき
On Instantiate ItemBagからシーンへアイテムがドロップされたとき
CurrencyOn Change CurrencyBagの通貨値が変化したとき
EquipmentOn Equip / On Unequip装備・装備解除時
MerchantOn Buy / On Sell購入成功・売却成功時
SocketsOn Socket Attach / On Socket DetachSocket差し込み・取り外し時
TinkerOn Craft / On Dismantleクラフト成功・解体成功時
UIOn Open/Close Bag UIBag UI開閉
On Open/Close Merchant UI商店UI開閉
On Open/Close Tinker UITinker UI開閉

実践的な使い方 ― やりたいこと別の構成ガイド

HPポーションを使う

  1. Item Health Potion を作成。Usage セクションで Consume on Use = true
  2. Can Use にConditions(例:プレイヤーが生存しているか)
  3. On Use にStatsモジュールの Change Attribute でHP+50
  4. UIのホットバーから右クリック → GC2内部が自動で「使用」処理を発火

武器にルーンを挿す

  1. 武器Item Iron SwordSockets にBase Item = Rune を追加
  2. Rune の子Itemとして Rune of Attack(Property: attack +10)を作成
  3. Instruction Attach Runtime Item でプレイヤーの持ち物にあるルーン → 剣に装着
  4. 攻撃力Formulaで sword.attack + attached_rune.attack を合算(Statsモジュール)

商人と取引

  1. NPCに Bag + Merchant をアタッチ、BagAdd Stock
  2. Interact 時に Open Merchant UI 命令で取引開始(Client Bag = PlayerのBag
  3. Merchant UIの On Buy / On Sell で音や通知を鳴らす

宝箱のランダム中身

  1. Chest Prefabに Bag コンポーネント
  2. On Start Trigger → Loot Table を3回呼ぶ
  3. 開封時の Open Bag UI でプレイヤーが取得

クラフトステーション(鍛冶/錬金の使い分け)

同じ Tinker UI を使い、Filter Item に親Itemを差し替えるだけで切り替えます。Forge → Filter = Equipment、Alchemy → Filter = Potion

アイテム重量で移動速度を落とす

Trigger On Add / On RemoveIs Overloaded を確認し、真なら Change Movement Speed でキャラの速度を下げ、通知UIを出します。

クールダウン付きスキル化

Add Item Cooldown で使用後にクールダウン化。UIでは Is Item Cooldown で残り時間を監視して表示をグレーアウトします。


Tipsと注意点

  • Max StackはSocket有無で強制変わる:Socketを持つItemはインスタンスごとに差分が出るためStack不可。スタッキング設計のときはソケット不要なItemに分けてください
  • 継承を活かすと同じロジックを使い回せる:ポーション全般の「使用時にボイスを出す」ような処理は親ItemのOn Useに書いて、子は Execute From Parent に頼る
  • 小数値は桁上げ:Currencyは整数のみ。0.50ドルが欲しいなら50セントと扱う
  • Grid Bagは最後の手段:形状パズル要素が欲しくないならList Bagで十分。UI実装が格段に楽
  • ItemとRuntime Itemを混同しない:テンプレとインスタンス。Equip/Drop/Hasの命令にも両系統がある点に注意
  • MerchantのBuy/SellはPlayer目線:On Buy = プレイヤーが買った時。名前を逆に解釈しないよう注意
  • セーブ対象:Runtime Item、Bagの内容、装備状態、クールダウンは標準でセーブ可能(Save&Loadシステム経由)
  • Move Content To BagMove Wealth To Bag は別命令:宝箱の「全部持っていく」では両方必要
  • Filter by Parent を徹底活用:タブ分け/商人ジャンル/クラフトジャンルのすべてが親Itemの型で制御できます。Item階層設計が成否を握ります

公式リンク


まとめ

本記事では、Game Creator 2のInventoryモジュールについて解説しました。如何だったでしょうか。

InventoryモジュールはItem定義からBag管理、装備、通貨、商店取引、クラフト、確率ドロップまでゲーム内のアイテム管理に必要なすべてを包括しています。

特にItem継承による型フィルタの仕組みが強力で、タブ分け・商人ジャンル・クラフトジャンルのすべてを親Itemの型だけで制御できる設計は、大規模なゲームでも破綻しにくい堅牢さを持っています。

全記事一覧 ― Game Creator 2 完全ガイド シリーズ総合案内senkohome.com/gamecreator2-series-index/

それでは次の記事も閲覧いただけると幸いです。