インベントリを作り始めると、決めることが一度に押し寄せてきます。アイテムの情報をどこに置くか、同じアイテムをどうまとめるか、上限をどう持つか、UIへどう伝えるか。とりあえずプレイヤーに配列を1本持たせて始めると、装備やスタックを足すたびに作り直しになります。
インベントリは、ここま での記事で出てきた部品が集まってできています。Data Asset、Map、構造体、Component、Event Dispatcher。この記事では、それらをどう組み合わせるかという 設計の決め方 から始めて、拾う・持つ・使う・減るが一周する最小のインベントリまでを解説します。
この記事でわかること
- 設計の出発点は 「定義」と「所持状態」を分ける こと
- 所持の持ち方は Map(定義 → 個数) か 構造体の配列 。選ぶ基準は2つ
- Inventory Component に切り出して、どのActorにも挿せる形にする
- スタック上限と容量上限 をどこで判定するか
OnInventoryChangedでUIへ通知し、毎フレームの作り直しをやめる- 実践: 拾う・持つ・使う・減るが一周する最小のインベントリ
定義と所持を分ける
最初に決めるのはこれだけです。 アイテムに関する情報を、2つに割ります。
| 定義(全個体で共通) | 所持状態(そのプレイヤー固有) | |
|---|---|---|
| 中身 | 表示名、アイコン、最大スタック数、回復量、説明文 | 何を、いくつ持っているか |
| 変わるタイミング | 開発中の調整だけ | プレイ中に常に変わる |
| 何個あるか | アイテムの種類の数 | プレイヤーごとに1つ |
| 置き場所 | Data Asset | Inventory Component の変数 |

分ける理由は、 定義は1枚で足りるから です。薬草の回復量が20であることは、プレイヤーが3個持っていようが99個持っていようが同じです。所持データの中に回復量をコピーして入れてしまうと、拾った瞬間の値が持ち主ごとに焼き付きます。バランス調整で20を25に変えても、すでに拾われた薬草は20のままです。
所持データが持つべきなのは、 どの定義を指しているか(参照)と、いくつか(数) だけです。
定義はアイコンやメッシュへの参照を含むので、Data Assetが向いています。作り方はData Assetの記事にまとめてあるので、ここでは形だけ示します。
| 変数名 | 型 | 例(薬草) |
|---|---|---|
DisplayName | Text | 薬草 |
Icon | Texture 2D | (アイコン画像) |
MaxStack | Integer | 9 |
HealAmount | Float | 20.0 |
補足: 数値と文字列が中心で、100行を表で見比べたいならData Tableでも構いません。その場合、所持データが指すのは定義アセットではなく