PROTOTYPE DE SYSTÈME D'INVENTAIRE

Prototype de système d'inventaire simple et "scalable" grandement inspiré de Subnautica. Je l'ai réalisé en vue de 3 prototypes de jeux que je souhaite faire et qui utiliseraient chacun un système d'inventaire légèrement différent. Il était important pour moi d'offrir une expérience fluide et intuitive avec ce système, et de pouvoir changer fluidement entre manette et clavier/souris.
Ce prototype comprend:
Un système d'interaction
Supporte le "stacking" d'items
3 types d'auto-organisation
Entreposages
Laisser tomber des items (avec une boîte de dialogue pour spécifier une quantité au besoin)
Support manette complet
Assets utilisés:


Développement - Design technique
FAIT AVEC UNREAL ENGINE 5
DÉVELOPPEMENT & DESIGN TECHNIQUE
Structure générale
Pour les données des items, j'utilise une data table contenant les informations suivantes:
Nom
Type (enum)
Description
IsStackable (boolean)
MaxStackSize (si stackable)
Référence au thumbnail
Référence à la classe (utilisée quand l'item est spawné; doit extend la class BP_Item)
I also have a F_InventoryItem struct used for each instance of an item (on the actor itself, or on a storage/inventory slot). The struct contains a data table row handle (referencing an entry in the data table) and a quantity.
J'ai aussi un struct F_InventoryItem utilisé pour chaque instance d'un item (sur l'acteur en soi, ou sur un slot d'inventaire/entreposage). Le struct contient une data table row handle (faisant référence à une entrée dans la data table) et une quantité.
BP_ThirdPersonCharacter
J'ai fait une interface BPI_Interactable pour tous les acteurs avec lesquels il est possible d'interagir, contenant 2 fonctions à implémenter: Interact et ShowPrompt. Tous les acteurs "interactable" devraient avoir un trigger collider qui couvre la distance à partir de laquelle le joueur peut interagir avec eux.
Le blueprint du personnage garde dans une array les références des acteurs interactables avec lesquels il overlap.
Blueprint: Event Graph - Interaction System
Chaque fois que le personnage ou la caméra bouge, la fonction suivante est appelée. Elle est utilisée pour déterminer lequel des interactables à proximité devrait être priorisé quand le joueur exécute l'action d'interagir, en se basant sur si l'acteur est à l'écran, et lequel des acteurs est le plus en face du personnage.
BP_StorageComponent
Component attaché à tout acteur ayant de l'entreposage (incluant l'inventaire du personnage jouable). Il offre des fonctionnalités communes à tout entreposage, comme afficher ce dernier, ajouter et retirer des items, "stacker" des items (si applicable; déterminé par item) et auto-organiser des items (si applicable).
Fonctions Blueprint pour ajouter/retirer des items d'un entreposage:
Blueprints additionnels:
BP_InventoryComponent
Sous-classe de BP_StorageComponent, elle bâtit sur celle-ci avec des fonctionnalités spécifiques à l'inventaire du joueur. Attachée à BP_ThirdPersonCharacter.
Blueprints:
WBP_Inventory
Ce widget est utilisé pour l'inventaire du joueur et tous les entreposages. Il contient 2 wrap-box qui peuvent contenir elles-mêmes des "slots" d'inventaire. La wrap-box à utiliser est déterminée par le component (BP_StorageComponent ou BP_InventoryComponent) qui crée le widget.
Des options de développement sont inclues pour des fonctionnalités plus spécifiques qui peuvent varier d'un jeu à l'autre.
Blueprints:
WBP_Slot
Widget pour un "slot" d'inventaire/d'entreposage. Il contient une bonne partie de la logique du système, dont 2 types d'actions possible: une action "submit" (clavier/souris: clic gauche; manette: face button down (Xbox A)) et une action "spéciale" (clavier/souris: clic droit; manette: face button left (Xbox X)).
Quand seulement l'inventaire est ouvert, l'action "submit" exécute la fonctionnalité première de l'item, selon son type (utilise les items consommables, équipe les équipements, etc.). L'action "spéciale" laisse tomber (drop) l'item.
Quand un entreposage est ouvert, l'action "submit" transfère l'item d'un entreposage/inventaire à l'autre, et l'action "spéciale" est désactivée (avec la possibilité d'une implémentation future).
Fonctions Blueprint pour ces actions:
Sur manette, un item est toujours sélectionné. Sur clavier/souris, aucun item n'est sélectionné. Le type d'input peut être changé fluidement d'un à l'autre.
Blueprints additionnels:
WBP_ItemInfoPanel
Widget pour le panneau affichant les informations sur un item. Sur manette, le panneau apparaît directement sous le "slot" de l'item sélectionné. Sur clavier/souris, il suit la souris et apparaît seulement quand elle survole le "slot" d'un item.
Fonction Blueprint pour charger les informations d'un item: LoadItemInfo
WBP_DropConfirmation
Widget pour la fenêtre de confirmation de "drop" (l'option de développement peut être activée dans l'inventaire). Cette fenêtre s'ouvre à chaque fois que le joueur tente de laisser tomber un item "stackable" qui contient plus d'une unité, et permet de spécifier une quantité valide à laisser tomber.
Blueprints additionnels: