インベントリ システムにより、プレイヤーはアイテムを見つけて保管したり、アイテムを操作するためのカスタマイズ可能なユーザー インターフェイスを提供したり、シーンの開始時と終了時にアイテムを自動的に復元して保存したりできます。システム自体は、柔軟な基盤を可能にする Scriptable Objects に大きく依存しています。
主なコンポーネントは 5 つあります。Item、PickUpItems、Inventory、InventorySO、ItemSO です。プレイヤーは PickUpItems を使用してアイテムを拾い、InventorySO に追加します。次に、アイテムは ItemSO にマッピングされ、これには Inventory に表示するために必要な情報が含まれます。そこから、ユーザーはアイテムを選択、移動、および使用できます。
Inventory の UI 構造は、InventorySO の内容を表示するだけです。このため、複数のインベントリを作成して連携させることができます。したがって、銃器アイテム専用のインベントリと、システム内のすべてのアイテム用のインベントリを持つことが可能です。
InventorySO
このスクリプト可能オブジェクトは、インベントリ システム全体をまとめる接着剤のようなものです。主な役割は、すべてのアイテムのリストを格納し、アイテムを追加および削除し、これらのアイテムをメモリに保存することです。各 InventorySO には、保存のために一意の名前が必要です。また、正しく機能するには、少なくとも 1 つの Inventory によって参照される必要があります。
複数のインベントリを連携させて、すべて同じアイテムを参照することも可能です。これを実現するには、それらのインベントリが同じ InventorySO を参照する必要があります。それだけです。
InventorySO を作成するには、プロジェクト ウィンドウを右クリックし、[Create/FlareEngine/InventorySO] に移動します。
Property | |
---|---|
Reference Inventory | インベントリ内に存在する可能性のあるアイテムはすべて、対応する ItemSO を参照インベントリに追加する必要があります。 アイテムの参照 ItemSO がこのリストに含まれていない場合、キャラクターはアイテムを拾うことができません。 |
Default Items | このリストにあるすべてのアイテムは、アクティブなインベントリにすぐに挿入されます。 これは慎重に使用してください。システムは、インベントリに存在しないアイテムを常に追加しようとします。たとえば、ヘルスアイテムをデフォルトにすると、インベントリにヘルスアイテムがなくなるたびにこのアイテムが追加されます。これは、デフォルトの銃器を設定するなど、非消耗品アイテムに適しています。 |
Warning
異常な動作の一般的な原因は、新しい ItemSO が作成されるたびに参照インベントリが更新されないことです。
Method | |
---|---|
Save( ) | インベントリがメモリに保存されます。 シーンが終了すると、OnDisable によって呼び出されます。ただし、このメソッドはいつでも呼び出すことができます。また、すべてのインベントリを保存する静的メソッド InventorySO.SaveData () を使用することもできます。TwoBitMachines 名前空間の使用が必要になります。 |
ItemSO
このスクリプト可能オブジェクトは、プレイヤーが拾うことができるアイテムのテンプレートです。アイテムのライフサイクルを処理するために必要な情報と設定が含まれています。
ItemSO を作成するには、プロジェクト ウィンドウを右クリックして、Create/FlareEngine/ItemSO に移動します。
Property | |
---|---|
Item Name | アイテムの名前。識別のため、一意である必要があります。 |
Key Name | インベントリ内のアイテムが使用されると、PickUpItems はキー名を使用して、トリガーする正しい Unity イベントを検索します。 |
Icon | The item’s icon. This sprite will be displayed iアイテムのアイコン。このスプライトはインベントリに表示されます。 |
For Inventory | AddToInventory が有効になっている場合、アイテムはインベントリに追加されます。 そうでない場合、アイテムはすぐに使用されます。アイテムをすぐに使用できない場合 (値がすでに最大値に達している可能性があります)、システムはバックアップ対策としてアイテムをインベントリに追加しようとします。 |
Droppable | 「No」を有効にすると、アイテムはインベントリからドロップできません。 「Yes」を有効にすると、ドロップでき、アイテムのプレハブを指定できます。このプレハブは、キャラクターの隣のシーンでインスタンス化されます。プレハブが存在しない場合は、アイテムはインベントリから削除されます。 |
Consumable | 有効にすると、このアイテムが使用されるとインベントリから削除されます (コインやヘルスなど)。同じタイプの消耗品はインベントリにスタックできます。スタックの制限を設定します。制限に達すると、インベントリは別のスロット アイテムを作成し、スタック プロセスを再度開始します。これが有効になっていない場合、アイテムは使用されてもインベントリに残ります。銃器を考えてみましょう。この状況では、インベントリにはこれらのアイテムが 1 つしか存在できません。同じ銃器を 2 つ持つのは意味がありません。 |
Generic Float And String | これらの値の意味は完全に任意です。まったく必要でない場合もあります。その目的は、アイテムが実行する必要がある内容に完全に依存します。 たとえば、銃器アイテムが使用される場合、対応するイベントは、これらの値を使用することなく、実際の銃器のゲームオブジェクトをアクティブ化または非アクティブ化するだけです。ヘルスアイテムの場合は、キャラクターに適用されるヘルスの量を指定するために、Generic Float のみが必要です。 |
Cost | このアイテムが属する在庫がベンダータイプの場合、これによってアイテムのコストが決まります。また、販売時にこのアイテムを在庫に保持するか削除するかも選択します。 |
Item Description | アイテムの機能を説明します。これはインベントリに表示されます。 |
PickUpItems
このコンポーネントをキャラクターに取り付けます。アイテムに接触すると、アイテムが非アクティブ化され、インベントリに追加されます。
このアイテムが消耗品ではなく、すでにインベントリに存在する場合、システムはそれを無視します。
Property | |
---|---|
Inventories | キャラクターが使用している各インベントリの参照を設定します。PickUpItems は、適切に機能するために、Awake 中にこれらのインベントリを初期化します。 |
Item Events | 各アイテムには、対応するアイテム イベントに属するキー名 (ItemSO 内) があります。アイテムが使用されると、システムは正しいアイテム イベントを見つけてトリガーし、アイテムの本来の目的を実行します。このイベントは、アイテムの汎用値と成功ブール値を含むクラスである引数 ItemEventData で呼び出されます。 アイテム イベントによって呼び出されるメソッドには、パラメーターとして ItemEventData が必要です。 |
Is Vendor | 有効にすると、インベントリはプレイヤーの所有物ではないことを意味します。 プレイヤーは、お金を使ってこのインベントリからアイテムを購入する必要があります。お金は、コインを表すことができる WorldFloat コンポーネントによって表されます。コインは通常、プレイヤーがゲームの世界で収集しなければならないアイテムです。プレイヤーの PickUpItems コンポーネントを取得するために使用されるプレイヤーのトランスフォームと、アイテムを購入するために使用される WorldFloat への参照を設定します。 イベントは 2 つあり、1 つはトランザクションが成功した場合、もう 1 つはトランザクションが失敗した場合 (お金が足りない) です。 ベンダーは、AI システムによって制御され、インベントリ UI メニューをトリガーできます。 |
Mouse Pick Up | 有効にすると、ユーザーはアイテムをクリックしてインベントリに追加できます。アイテムが存在するレイヤーを指定します。 |
ItemEventData の値は内部的に設定されていることを認識することが重要です。独自のメソッドを実装する場合に考慮する必要がある唯一の値は、itemEventData.success を True または False に設定して、アイテムが使用されたときに在庫システムが適切に処理できるようにすることです。
success 値が設定されていない場合、システムは True の値を想定します。Item Event の例をいくつか見てみましょう。

ヘルスアイテムを使用する場合は、アイテムイベントをヘルスコンポーネントに接続し、動的メソッドの Increment を選択します。これで完了です。内部的には、システムはアイテムの汎用 float 値を使用してヘルスを増加させます。Increment メソッドが成功すると、itemEventData.success が true に設定されます。false に設定されている場合、システムはイベントを失敗と解釈し、ヘルスアイテムをインベントリに保持します。
同様に、銃器アイテムを使用する場合は、アイテムイベントをプレイヤーコンポーネントに接続し、動的メソッドの ToggleOrActivateOnly を選択します。これで完了です。内部的には、システムは銃器ゲームオブジェクトのアクティブ状態を切り替え、他のすべての銃器 (存在する場合) をオフにしようとします。このメソッドは、この場合アイテムが消耗品ではないため、itemEventData.success を自動的に true に設定します。ItemEventData の他の値は使用されません。
アイテムを使用して銃器の発射体を変更する場合は、アイテムイベントを Player に接続し、動的メソッド ChangeFirearmProjectile を選択します。これが機能するには、Firearm コンポーネントに ProjectileInventory (発射体のリストを含む) が含まれている必要があります。このメソッドは、新しい発射体の名前を指定する汎用文字列値を使用します。発射体の変更に成功した場合、システムは ItemEventData.success を true に設定します。このメソッドは、システムが最初に見つけたアクティブな銃器の発射体を変更することに注意してください。より具体的なアプローチが必要な場合は、Player を使用する代わりに、Firearm コンポーネントを使用します。
アイテムを使用して発射体の弾薬を増やすには、アイテム イベントを ProjectileInventory に接続し、動的メソッド ChangeProjectileAmmo を選択します。この場合、itemEventData は両方の汎用値を使用します。汎用文字列を使用して変更する発射体の名前を指定し、汎用 float 値を使用して弾薬の量を変更します。
Item
このコンポーネントをアイテムである任意のゲームオブジェクトにアタッチします。このアイテムは、キャラクターが接触するとインベントリの一部になり (ゲームオブジェクトは非アクティブになります)。Circle Collider2D をアタッチし、isTrigger を true に設定します。各アイテムは ItemSO に対応している必要があります。
Property | |
---|---|
Type | Itemの場合、アイテムはインベントリ システムによって使用されます。 Toolの場合、アイテムはツールであり、キャラクターの子になります。 Tool Swapの場合、キャラクターは現在のツールと新しいツールでツールを交換します。古いツールはキャラクターの子ではなくなります。これは銃器を拾うときに便利です。 |
ItemSO | ItemSO への参照。 |
Add To Journal | アイテムが見つかった場合、シーン内に存在する場合は指定されたジャーナルに追加されます。 |
Inventory
インベントリには UI 構造が含まれています。このコンポーネントを Canvas ゲームオブジェクトに配置します。
スロット (アイテムコンテナー) と付随する機能は、必要に応じて配置できます。
スロットをグリッド、垂直または水平バーに配置することも、スロットを 1 つだけ配置することもできます。完全にあなた次第です。
スロットはインベントリの最も重要な要素です。その他はすべてオプションです。
各スロットには InventorySlot コンポーネントが含まれている必要があります。
Property | |
---|---|
InventorySO | InventorySO への参照。 |
View Items | 「All」を有効にすると、インベントリ内のすべてのアイテムがこのインベントリに表示されます。 「Key Name」を有効にすると、指定されたキー名のアイテムのみが表示されます。これは、銃器のみを含むインベントリを作成する場合に最適です。 |
Navigation | Unity ナビゲーションが有効になっている場合、スロットをナビゲートするための主な方法はキーボード/マウスになります。 必ず、Send Navigation Events (イベントシステム内) を true に設定し、システムの一部ではない UI ボタンのナビゲーションを None に設定してください。この設定は、グリッドに配置されたスロットに適しています。Manual に設定すると、ボタンを使用してアイテムをスロット間で移動します。スロットがバーに配置されている場合は、このオプションを使用します。 |
Property | |
---|---|
Left, right | スロットのレイアウトに応じて、アイテムを左右または上下に移動するためのボタン。 |
Auto Item Load | 有効にすると、最初のスロットのアイテムが自動的に使用されます。 |
Toggle Inventory | インベントリ ゲームオブジェクトのアクティブ状態を切り替えるボタン。 ボタンが不要な場合は、[None] に設定します。 ボタンが存在する場合は、インベントリがアクティブになったときにゲームを一時停止するかどうかを指定します。ゲームを一時停止すると、プレイヤーの入力もブロックされます。 [Block Player Input] が有効になっている場合、インベントリが開いているときにプレイヤーの入力のみが一時停止されます。 |
Use Item – Slots | OnSlotSelection が有効になっている場合、ユーザーがスロットをクリックまたは押すと、その項目がすぐに使用されます。有効になっていない場合、項目は選択されるだけで使用されません。 |
Use Item | アイテムを使用するためのボタンです。ナビゲーションが「Unity Navigation」に設定されている場合、このボタンを押すと選択したアイテムが使用されます。 ナビゲーションが「Manual」に設定されている場合、最初のスロットのアイテムが使用されます。 ボタンが不要な場合は、「None」に設定します。 |
Blocked By | このリスト内の参照されたインベントリがすでに開いている場合、このインベントリは開きません。これは、インベントリ切り替えボタンを使用してこのインベントリを開こうとした場合にのみ機能します。 |
UI 参照はすべてオプションであり、必要な場所に配置できます。使用する場合、システムは適切なタイミングでそれらを設定および有効化します。
Property | |
---|---|
Item Name | 選択した項目の名前を表示する TextMeshPro。 |
Item Selected | 選択した項目のアイコンを表示する UI イメージ。 |
Item Description | 選択した項目の説明を表示する TextMeshPro。 |
Item Cost | 選択したアイテムのコストを表示する TextMeshPro。これは、ベンダー タイプのインベントリに使用されます。 |
Current Item | 現在の非消耗品アイテムのアイコンを表示する UI イメージ。この UI イメージは通常、プレイヤーに現在のアイテムを思い出させるためにインベントリの外部に存在します。 |
Drag Item | DragItem コンポーネントを含む UI イメージ。存在する場合、アイテムをドラッグしてスロット間で交換できます。アイテムをドラッグすると、マウスの横にアイテムのアイコンが表示されます。スロットで Unity グリッド レイアウトが使用されている場合は、このゲームオブジェクトにレイアウト要素コンポーネントをアタッチし、IgnoreLayout を true に設定します。これにより、UI イメージを自由に移動できるようになります。 |
Remove Item | The UI button reference for removing items. アイテムを削除するための UI ボタン参照。アイテムをドロップできる場合、この要素が表示されます。 |
Select Frame | 選択したスロットに自動的に移動して強調表示される UI イメージ。速度は、新しいスロットに移動する速度を指定します。0 に設定すると、イメージは即座に移動されます。 |
Refresh Slots | インベントリスロットが UI 構造に追加されるか、UI 構造から削除されるたびに、このボタンを押す必要があります。 |
Delete Slots | テスト用です。押すと、インベントリに保存されているすべてのデータが削除されます。 |
Events | |
---|---|
OnOpen | インベントリが開かれたときに呼び出される Unity イベント。 |
OnClose | インベントリが閉じられたときに呼び出される Unity イベント。 |
OnMove | ユーザーが新しいスロットをクリックしたときに呼び出される Unity イベント。 |
OnUseItem | アイテムが使用されたときに呼び出される Unity イベント。 |
OnRemoveItem | アイテムが削除されたときに呼び出される Unity イベント。 |
Method | |
---|---|
MoveLeftUp ( ) | 項目を左または上に移動します。 |
MoveRightDown ( ) | アイテムを右または下に移動します |
UseSelectedGridItem ( ) | 現在選択されているグリッド項目を使用します。 |
RemoveSelectedGridItem ( ) | Remove the currently selected grid item if it’s 選択されたグリッド項目を削除します ( ) |
InventorySlot
インベントリ スロットは、アイテムを表示するためにインベントリによって使用されます。各スロットにはこのコンポーネントが必要です。デモには、アイテムをドラッグおよびスワップするための接続を含む適切なセットアップが含まれています。
Property | |
---|---|
Image Icon | アイテムのアイコンを表示します。 |
Image Drop (Optional) | UI イメージが存在する場合、ドロップ可能なアイテムで有効になります。このイメージに属するボタンは、DropItem メソッドを呼び出して、アイテムをシーンに戻す必要があります。 |
Text Mesh (Optional) | TextMeshPro が存在する場合、アイテムが消耗品であれば、アイテムのスタック数が表示されます。 |
Method | |
---|---|
UseItem ( ) | このスロットのアイテムを使用します。 |
DropItem ( ) | これにより、このスロット内のアイテムがキャラクターの隣のシーンにインスタンス化されます。 |