アイテムおよびインベントリのシステムは、多くの種類のゲームで重要な部分を占めます。 シーングラフのエンティティとコンポーネントを使用すると、フォートナイトのプレイヤー インベントリをカスタマイズし、独自のアイテムを島に作成できます。
アイテムは、プレイヤーとエージェントが使用および所有できるオブジェクトです。 インベントリには、既存のフォートナイト プレイヤーのインベントリと inventory_component を使用して作成したカスタム インベントリが含まれます。 カスタム アイテムとカスタム インベントリは、アイテムを作成、制御、格納するためのシステムです。 このシステムは実験段階の機能であるため、[Project Settings (プロジェクト設定)] で有効にする必要があるほか、Unreal Editor for Fortnite (UEFN) のシーングラフと Verse で使用する必要があります。
シーン グラフの基本
シーングラフは、Verse に基づいてビルドされたエンティティおよびコンポーネント システムです。 エンティティはコンポーネントのコンテナであり、コンポーネントがエンティティに機能を与えます。 エンティティを親子関係で互いにアタッチすることができ、これによって階層が作成されます。 エンティティやコンポーネントを再利用可能に調整したものをプレハブと呼びます。
エンティティとコンポーネントについて詳しくは、「エンティティとコンポーネントを操作する」を参照してください。 プレハブについて詳しくは、「プレハブとプレハブ インスタンス」を参照してください。
アイテム
アイテムは、エンティティに item_component を配置することでシーングラフに作成されます。 インベントリは、コンポーネントをオブジェクトのように扱います。 item_component は、次のような機能を提供します。
item_component 自体では、アイテムに提供できるオプションは限られています。 追加のコンポーネントによって、機能性を高めてより興味深いものを作成できます。
詳しくは、「アイテム コンポーネント」を参照してください。
インベントリ
インベントリはアイテムのコンテナであり、それらのアイテムに発生する事柄を制御します。 インベントリは、inventory_component を持ち、以下のように動作するエンティティです。
その中に存在するすべてのアイテムを認識します。
インベントリにどのアイテムが入って、どのアイテムが出るかを制御します。
インベントリ内にすでに存在するアイテムと、入ってくるアイテムがマージしようとしたときに何が起こるかを決定します。
アイテムは一度に 1 つのインベントリ内にのみ存在できるため、インベントリによってアイテム エンティティの所有権も決まります。 インベントリのサブエンティティは、item_component も持っている場合にのみインベントリ内のアイテムと見なされ、そうでない場合は子サブエンティティになります。
デフォルトでは、インベントリにはあらゆる種類のアイテムを無限に保持できます。 Verse を使用すると、アイテムの追加と削除に影響を与える制限とルールを作成できます。 例:
カテゴリが正しい場合にのみ、アイテムをインベントリに追加します。
インベントリのアイテム数を制限。
インベントリから最後のアイテムが削除されるのを防ぎます。
インベントリがいっぱいになったときに、優先度の高いアイテムから優先度の低いアイテムを取り除くことができます。
インベントリを単一のアイテムに制限。
インベントリ ツリー
インベントリは、シーングラフ階層で自身の下にあるインベントリを認識します。 これらの子インベントリは、サブインベントリと呼ばれます。 インベントリのツリーはさまざまな方法で活用できます。
たとえば、アイテムを親インベントリに追加すると、より特化した子インベントリに移動できます。 これは、プレイヤーにコインを与え、インベントリ システムを通じてウォレット (プレイヤー インベントリ > バックパック インベントリ > マネー ポーチ インベントリ) に移動させることであると考えることができます。
より高度なインベントリ動作を作成するには、Verse を記述する必要があります。
Verse:インベントリ
インベントリにアイテムを追加するには以下の 2 つの方法があります。
AddItem()を呼び出して、1 つのインベントリにアイテムを追加する。AddItemDistribute()関数を呼び出し、インベントリ階層を使用して最適なインベントリまたはサブインベントリを見つける。
AddItemDistribute() 関数が呼び出されると、ターゲットになっているインベントリと、そのすべてのサブインベントリに、アイテムを評価して受け取る機会が与えられます。 それぞれが考慮された後、最も適切なインベントリがアイテムを追加しようとします。
プレイヤー インベントリ ルート
プレイヤーはデフォルトでインベントリを持っています。 これは、インベントリ ルートと呼ばれます。 他のインベントリとは異なり、プレイヤーのインベントリ ルートはアイテムを受け入れることはできません。 その代わりに、その下にあるサブインベントリの親として機能します。 これにより、AddItemDistribute() を使用してインベントリ ルートをターゲットにし、最初のターゲットがアイテムを受け取れない場合でも、アイテムが適切なインベントリを見つけることができます。
プレイヤーがアイテムを受け取るには、インベントリ ルートの下に 1 つ以上のサブインベントリが必要です。
上記の解説は、Verse または プレハブ エディタ を通じてinventory_component が追加されたエンティティには影響しません。