Cette fonctionnalité est en phase expérimentale pour vous permettre de la tester, de nous faire part de vos commentaires et de prendre connaissance de ce que nous prévoyons pour l'avenir. À ce stade, il n'est pas possible de publier un projet qui utilise l'itémisation.
Nous attirons votre attention sur le fait que nous ne garantissons aucune compatibilité descendante pour les ressources créées en phase expérimentale. Les API associées à ces fonctionnalités sont susceptibles d'être modifiées, et nous pouvons supprimer à notre discrétion des fonctionnalités expérimentales ou spécifiques. Consultez la [liste des problèmes connus](scene-graph-in-unreal-editor-for-fortnite#problèmesconnus) avant de commencer à utiliser cette fonctionnalité.
Le composant inventory_component est un composant Scene Graph utilisé comme conteneur d'objets. Pour savoir comment ajouter un composant à votre entité, consultez la rubrique Utiliser des entités et des composants.
Les entités ne sont considérées comme des objets que si elles possèdent un composant item_component. Sans cela, les entités ne seront pas correctement ajoutées aux inventaires et les fonctionnalités d'inventaire personnalisé et d'objet personnalisé risquent de ne pas fonctionner correctement.
Les références à un “objet” font référence à une entité disposant d'un composant
item_component.Les références aux "inventaires" font référence à une entité disposant d'un composant
inventory_component.
Description de la classe
Le composant inventory_component est utilisé comme conteneur d'objets. Les objets ajoutés à l'inventaire deviennent des enfants de l'entité du composant inventory_component. En plus de la fonctionnalité normale de hiérarchie des graphiques de scène, les inventaires peuvent se gérer eux-mêmes ainsi que les objets qu'ils contiennent, grâce à des propriétés et des méthodes spécifiques :
Ajoutez ou supprimez des objets à l'aide de
AddItem()etRemoveItem().Pour récupérer des objets, vous pouvez utiliser
GetItem()etFindItems(). Les fonctions Get renvoient les enfants immédiats, tandis que les fonctions Find renvoient tous les descendants.Pour trouver d'autres inventaires, utilisez
GetInventories()etFindInventories().Événements auxquels s'abonner, tels que
AddItemEventetRemoveItemEvent.GetEquippedItems()peut être utilisé pour l'équipement, et les événementsEquipItemEventetUnequipItemEventpermettent de les suivre.
Avec un composant inventory_component, n'importe quelle entité peut devenir un sac ou un sac à dos, un coffre contenant du butin ou même un arsenal de personnage contenant des armes et des compétences.
Les inventaires peuvent contrôler les objets qui sont ajoutés ou retirés de différentes façons. Une méthode utile fait appel aux événements de scène. Lorsque la fonction AddItem() est appelée, un événement de scène auquel les composants peuvent répondre est diffusé. Lorsqu'un événement de scène parvient à un composant, l’événement OnReceive() est déclenché ; il est possible de le remplacer pour déclencher une logique.
La version expérimentale des objets et inventaires personnalisés introduit également une autre méthode permettant de contrôler l'ajout, la suppression et la fusion des objets. En sous-classant le type inventory_rule_interface, il est possible d'écrire de nouveaux remplacements pour CanAdd(), CanRemove() et CanMerge(). Il est possible d'ajouter ces règles à InventoryRuleList à l'aide de AddRule(). Veuillez noter que cette fonctionnalité ne devrait pas être conservée au-delà de la version expérimentale.
Le composant est répertorié en tant que inventory_component dans la liste déroulante des composants. Pour plus d'informations, consultez
la référence d'API du composant inventory_component dans l'API Verse.
Inventaires et Scene Graph
Le système d'inventaires et d'objets personnalisés fournit une configuration de base qu'il convient de comprendre pour en tirer le meilleur parti.
Tous les joueurs commencent avec un inventaire racine, c'est-à-dire une entité disposant d'un composant inventory_component rattaché à l'entité du joueur. Cet inventaire racine possède également un certain nombre de sous-inventaires fort_inventory_component. Ils sont nécessaires pour préserver la fonctionnalité de Fortnite. Consultez la rubrique Composant d'inventaire Fort pour plus d'informations sur ces composants.
En raison de la méthode qui consiste à parcourir le Scene Graph, l'inventaire racine est toujours le premier inventaire trouvé lors de la recherche d'une entité possédant un composant inventory_component dans l'arborescence d'entités. L'inventaire racine est donc une cible adaptée à la jonction de nouveaux inventaires.
# 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]L'inventaire racine est associé au joueur et tous les sous-inventaires sont associés à l'inventaire racine. Les nouveaux inventaires doivent être ajoutés à l'inventaire racine afin que les autres systèmes n'aient qu'à rechercher et interagir avec cet unique inventaire racine.
Exemple
Ajouter un composant inventory_component à une entité dans l'éditeur de préfabriqué permet de stocker des objets sous forme d'inventaire.
Le coffre ci-dessous dispose d'un composant inventory_component. Il peut désormais utiliser toutes les fonctionnalités à l'intérieur du composant.
Cependant, pour tirer le meilleur parti des inventaires et objets personnalisés, vous devez utiliser 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) :
Une exigence courante des inventaires consiste à appliquer des règles pour définir les objets qui peuvent se trouver à l'intérieur. Vous trouverez ci-dessous un script pour un composant inventory_component personnalisé qui remplace la méthode
OnReceive() du composant. Ici, il a été utilisé pour créer une règle de taille maximale d'inventaire :
# 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
Pour obtenir des exemples d'inventaires et apprendre à utiliser le composant inventory_component, consultez les tutoriels de la rubrique Objets et inventaires personnalisés avec Scene Graph.