Diese Funktion befindet sich in einem experimentellen Zustand. Du kannst sie ausprobieren, Feedback geben und sehen, was wir planen. Du kannst derzeit kein Projekt veröffentlichen, das Aufschlüsselung verwendet.
Beachte, dass die Abwärtskompatibilität von Assets, die in der experimentellen Phase erstellt wurden, nicht garantiert werden kann. Die APIs für diese Funktionen können sich noch ändern und wir können ganze experimentelle Funktionen oder bestimmte Funktionalitäten nach unserem Ermessen entfernen. Sieh dir die Liste bekannter Probleme an, bevor du mit der Funktion arbeitest.
Die inventory_component ist eine Scene-Graph-Komponente, die als Container für Gegenstände verwendet wird. Wie du eine Komponente zu deiner Entität hinzufügst, erfährst du unter Arbeiten mit Entitäten und Komponenten.
Entitäten gelten nur dann als Gegenstände, wenn sie eine item_component haben. Ohne diese Einstellung werden die Entitäten nicht ordnungsgemäß zu den Inventaren hinzugefügt, und die Funktionalität von benutzerdefinierten Gegenständen und Inventaren kann beeinträchtigt sein.
Referenzen auf einen „Gegenstand“ beziehen sich auf eine Entität mit einer
item_component.Verweise auf „Inventare“ beziehen sich auf eine Entität mit einer
inventory_component.
Klassenbeschreibung
Die inventory_component wird als Container für Gegenstände verwendet. Dem Inventar hinzugefügte Gegenstände werden zu Children der Entität der inventory_component. Zusammen mit der normalen Funktionalität der Szenendiagramm-Hierarchie können Inventare sich selbst und ihre Gegenstände mit bestimmten Eigenschaften und Methoden verwalten:
Füge Gegenstände hinzu oder entferne sie mit
AddItem()undRemoveItem().Zum Abrufen von Gegenständen können
GetItem()undFindItems()verwendet werden. Get-Funktionen geben unmittelbare Children zurück, während Find-Funktionen alle Descendants zurückgeben.Um andere Inventare zu suchen, gibt es
GetInventories()undFindInventories().Ereignisse, die abonniert werden sollen, z. B.
AddItemEventundRemoveItemEvent.GetEquippedItems()kann für Ausrüstung verwendet werden, und die EventsEquipItemEventundUnequipItemEventkönnen verwendet werden, um sie zu verfolgen.
Mit einer inventory_component kann jede Entität zu einem Beutel oder einem Rucksack, einer Truhe mit Beute oder sogar Charakter-Ausrüstung mit Waffen und Fähigkeiten werden.
Inventare können steuern, welche Gegenstände auf verschiedene Weise hinzugefügt oder entfernt werden. Eine nützliche Methode dreht sich um Szenen-Events. Wenn die Funktion AddItem() aufgerufen wird, wird ein Szenen-Event gesendet, auf das Komponenten reagieren können. Wenn ein Szenen-Event bei einer Komponente ankommt, wird das Event OnReceive() ausgelöst, das überschrieben werden kann, um Logik auszulösen.
Die experimentelle Version von benutzerdefinierten Gegenständen und Inventaren umfasst auch eine weitere Methode zur Steuerung des Hinzufügens, Entfernens und Zusammenführens von Gegenständen. Durch Unterklassenbildung des Typs inventory_rule_interface können neue Overrides für CanAdd(), CanRemove() und CanMerge() geschrieben werden. Diese Regeln können mithilfe von AddRule() zu InventoryRuleList hinzugefügt werden. Beachte, dass dieses Feature wahrscheinlich nicht über die experimentelle Veröffentlichung hinausgehen wird.
Die Komponente wird in der Komponenten-Dropdown-Liste als inventory_component aufgeführt. Weitere Informationen findest du
in der API-Referenz zu inventory_component in der Verse-API.
Inventare und Scene Graph
Das System der benutzerdefinierten Gegenstände und Inventare bietet eine grundlegende Einrichtung, die du verstehen solltest, um es optimal zu nutzen.
Alle Spieler beginnen mit einem Stamminventar, das eine Entität mit einer inventory_component ist, die an die Spielerentität angehängt ist. Dieses Stamminventar hat auch eine Reihe von fort_inventory_component-Unterinventaren. Diese sind erforderlich, um die Fortnite-Funktionalität zu erhalten. Ausführliche Informationen zu diesen Komponenten findest du unter Fort-Inventarkomponente.
Aufgrund der Methode zum Durchlaufen des Scene Graph ist das Stamminventar immer das erste Inventar, das gefunden wird, wenn ein Entitätenbaum nach einer Entität mit einer inventory_component durchsucht wird. Aus diesem Grund ist das Stamminventar ein sinnvolles Ziel, um neue Inventare anzuhängen.
# 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]Das Stamminventar wird an den Spieler angehängt, und alle Unterinventare werden an das Stamminventar angehängt. Neue Inventare sollten dem Stamminventar hinzugefügt werden, sodass andere Systeme nur das eine Stamminventar finden und eine Schnittstelle dazu erstellen müssen.
Beispiel
Wenn du eine inventory_component zu einer Entität im Prefab-Editor hinzufügst, kann sie Gegenstände als Inventar speichern.
Die Truhe unten hat eine inventory_component. Sie kann nun die gesamte Funktionalität innerhalb der Komponente nutzen.
Um aber benutzerdefinierte Gegenstände und Inventare optimal zu nutzen, musst du Verse verwenden:
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) :
Eine allgemeine Anforderung für Inventare ist, Regeln dafür anzuwenden, welche Gegenstände darin vorhanden sein dürfen. Nachfolgend findest du ein Script für eine benutzerdefinierte inventory_component, welche die
Komponentenmethode OnReceive()) außer Kraft setzt. Hier wurde sie verwendet, um eine Regel für die maximale Inventargröße zu erstellen:
# 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
Gameplay-Beispiele für Inventare und wie du die inventory_component verwendest, findest du in den Tutorials unter Benutzerdefinierte Gegenstände und Inventare mit Scene Graph.