Dans cet article, nous allons discuter de la création d'un composant d'inventaire et de sa connexion à l'acteur requis. Étant donné que ce composant est simplement un référentiel d'objets et la logique de leur chargement / déchargement, il n'y a aucune différence dans son application à un personnage ou à une sorte de boîte.
Vous pouvez créer un composant en utilisant Blueprint et C ++ . Je préfère la deuxième méthode, car je vais utiliser activement la fonctionnalité C ++ .
Tout d'abord, nous créons une structure de cellules pour stocker un élément. Je préfère le stocker dans un fichier .h séparé afin de me connecter librement si nécessaire, si nécessaire:
Oui, notre cellule d'inventaire ne contient que 3 variables: identifiant, quantité et paramètres uniques. Rien de plus. Toutes les données peuvent être copiées, enregistrées et téléchargées sans aucun problème. Pas de textures, de références aux acteurs , etc. pas ici. Toutes les informations supplémentaires peuvent être téléchargées à partir de la base de données sur le DataAsset , dont nous avons parlé plus tôt.
Vous avez probablement déjà remarqué une autre structure StructItemFactors.h , connectée au début. Ce n'est rien de plus qu'un référentiel de propriétés uniques de l'objet (sous la forme d'un flotteur ), telles que l'usure, les dommages, etc. Autrement dit, des propriétés inhérentes uniquement à cette copie du sujet, et aucune autre n'est la même. Cette structure est très simple:
Il convient de noter une fonction très intéressante dans la structure ci-dessus, qui est conçue pour simplifier considérablement nos vies:
friend bool operator==(const FItemFactor & Lhs, const FItemFactor & Rhs) { return Lhs.ItemFactorTag == Rhs.ItemFactorTag && Lhs.ItemFactor == Rhs.ItemFactor; }
Ce n'est rien de plus qu'un opérateur de comparaison == , que nous pouvons utiliser pour cette structure afin de ne pas en extraire à chaque fois des éléments. Très confortable.
Donc, avec les structures terminées. Nous procédons à la création du composant:
DreampaxContainerComponent.h Si dans le code ci-dessus, activez la ligne
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
vous pouvez ensuite connecter ce composant directement à Blueprint . Je préfère le faire en C ++ . Pour Caractère, cela ressemble à ceci:
Inventory = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Inventory"));
Eh bien, pour un coffre comme celui-ci:
ADreampaxActorContainer::ADreampaxActorContainer(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { Container = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Container")); }
Comme vous pouvez le voir, la différence ne concerne que les noms des variables.
Dans le prochain article, je parlerai des fonctionnalités de réplication (simple sur les doigts ), ce qui rendra notre inventaire vraiment multijoueur.