これは現在、実験的機能です。したがって、それらを試したり、フィードバックを提供したり、計画を確認したりできます。 現時点で、アイテム化を使用するプロジェクトを公開することはできません。
実験段階でアセットを作成した場合、下位互換性は保証されません。 これらの機能の API は変更されることがあります。また、当社の判断で実験的機能全体や特定の機能が削除される場合があります。 この機能を使い始める前に、既知の問題のリストを確認してください。
inventory_component は、アイテムのコンテナとして使用されるシーングラフ コンポーネントです。 エンティティにコンポーネントを追加する方法については、「エンティティとコンポーネントを操作する」を参照してください。
エンティティは、item_component がある場合にのみアイテムと見なされます。 これがないと、エンティティはインベントリに適切に追加されないだけでなく、カスタム アイテムやインベントリの機能が壊れる可能性があります。
「アイテム」への参照は、
item_componentを持つエンティティを参照します。「インベントリ」への参照は、
inventory_componentを持つエンティティを参照します。
クラスの説明
Inventory_Component はアイテムを保持するコンテナとして使用されます。 インベントリに追加されたアイテムは、inventory_component のエンティティの子になります。 通常のシーングラフの階層機能に加えて、インベントリでは特定のプロパティとメソッドでインベントリ自体と所有アイテムを管理できます。
AddItem()とRemoveItem()を使用してアイテムを追加または削除します。アイテムを取得するには、
GetItem()およびFindItems()を使用できます。 Get 関数では直接の子が返され、Find 関数では全ての子孫が返されます。他のインベントリを見つけるには、
GetInventories()とFindInventories()を使用します。サブスクライブするイベント (
AddItemEventやRemoveItemEventなど)GetEquipedItems()は装備に使用でき、イベントEquipItemEventおよびUnequipItemEventはそれらを追跡するために使用されます。
inventory_component を使用すると、エンティティはバッグやバックパック、戦利品が入った宝箱、さらには武器やアビリティを含むキャラクター ロードアウトになり得ます。
インベントリは、さまざまな方法で追加または削除されるアイテムをコントロールできます。 役立つメソッドの 1 つにシーン イベントがあります。 AddItem() 関数が呼び出されると、コンポーネントによって応答可能なシーン イベントがブロードキャストされます。 シーン イベントがコンポーネントに到達すると、OnReceive() イベントが発生します。これをオーバーライドしてロジックをトリガーできます。
カスタム アイテムとインベントリの実験的リリースには、アイテムの追加、削除、マージを制御する別のメソッドも含まれています。 Inventory_Rule_Interface 型をサブクラス化することで、新しいオーバーライドを CanAdd()、CanRemove() および CanMerge() に書き込めるようになります。 これらのルールは、AddRule() を使用して InventoryRuleList に追加できます。 この機能は実験的リリース後に廃止される予定です。
コンポーネントは、コンポーネント ドロップダウン リストに inventory_component として表示されます。 詳細については、
Verse API の inventory_component API リファレンスを参照してください。
インベントリとシーングラフ
カスタム アイテムとインベントリ システムには、最大限に活用するために理解しておく必要のある基本的な設定があります。
全てのプレイヤーは、プレイヤー エンティティにアタッチされた inventory_component を持つエンティティであるルート インベントリから開始します。 このルート インベントリには、fort_inventory_component サブインベントリも数多くあります。 これらはフォートナイトの機能を維持するために必要です。 これらのコンポーネントの詳細については、「フォートナイトのインベントリ コンポーネント」を参照してください。
シーングラフをトラバースするメソッドにより、inventory_component を持つエンティティのエンティティ ツリーを検索した場合、ルート インベントリは必ず最初に見つかります。 そのため、ルート インベントリは新しいインベントリをアタッチするうえで適切なターゲットとなります。
# Helper function that gets the first descendant inventory component from an agent.
# This will be the root inventory.
GetAgentInventory(Agent:agent)<decides><transacts>:inventory_component=
TargetInventory := (for (I : Agent.FindDescendantComponents(inventory_component)) { I })[0]ルート インベントリはプレイヤーにアタッチされ、全てのサブインベントリはルート インベントリにアタッチされます。 新しいインベントリはルート インベントリに追加して、他のシステムが 1 つのルート インベントリを見つけてそれらとインターフェースするだけで済むようにする必要があります。
例
プレハブ エディタでエンティティに inventory_component を追加すると、アイテムをインベントリとして保存できます。
下の宝箱には inventory_component があります。 これでコンポーネント内の全ての機能を利用できるようになりました。
ただし、カスタム アイテムとインベントリを最大限に活用するには、Verse を使用する必要があります。
using { /Fortnite.com/Devices }
using { /Fortnite.com/Itemization }
using { /Verse.org/SceneGraph }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Itemization }
# This device will give an inventory to all players
# It will then make a dummy item and give it to the inventory.
inventory_giver_device := class(creative_device) :
インベントリの一般的な要件として、中に存在する可能性があるアイテムにルールを適用することが挙げられます。 以下に示すのは、カスタム inventory_component のスクリプトであり、
コンポーネント メソッド OnReceive() をオーバーライドします。 ここでは、最大インベントリ サイズ ルールを作成するために使用されています。
# This custom inventory component overrides the OnReceive function.
# This will allow us to determine whether or not we want an entity with this inventory component, to receive items.
custom_inventory_component := class(inventory_component) :
# What is the maximum number of items allowed in this inventory?
@editable
MaximumItemSlots:int = 5
インベントリのゲームプレイ サンプルと inventory_component の使用方法については、「シーングラフを使用したカスタム アイテムとインベントリ」のチュートリアルを参照してください。