đ CrĂ©ation dâun SystĂšme dâInventaire dans Godot 4.4.1
Bienvenue aventuriĂšre du pixel ! đ Aujourdâhui, nous allons crĂ©er un systĂšme dâinventaire simple et Ă©lĂ©gant pour ton jeu RPG Zelda-like. Tu verras, câest super pratique et les Resources de Godot vont rendre ça ultra flexible ! đ
đ Objectif
CrĂ©er un systĂšme dâinventaire utilisant les Resources pour stocker et gĂ©rer des items. Cela permettra de charger facilement des objets, de les manipuler dans plusieurs endroits de ton jeu, et dâafficher leur contenu dans ton interface utilisateur. đź
đ PrĂ©paration
- Godot 4.4.1
- Dossier dédié :
inventory/
- Textures pour les items (ex : potion, épée)
đ Ătape 1 : CrĂ©ation de lâInventaire (inventory.gd)
-
Créer un nouveau script :
File
âNew Script
- Extends :
Resource
. - Nom :
inventory.gd
- Dossier :
res://inventory/
-
Ajouter une classe pour facilement gĂ©rer lâinventaire :
extends Resource
class_name Inventory # Facilite l'utilisation de l'inventaire par d'autres scripts
@export var items: Array[InventoryItem] # Liste d'items dans l'inventaire
Pourquoi utiliser une class_name
? đ€
â
Cela permet de rĂ©fĂ©rencer lâinventaire facilement dans dâautres scripts, comme ton joueur ou lâUI dâinventaire.
đ Ătape 2 : CrĂ©ation des Items (inventoryItem.gd)
-
Créer un nouveau script :
File
âNew Script
- Extends :
Resource
. - Nom :
inventoryItem.gd
- Dossier :
res://inventory/
-
Ajouter une classe pour les items :
extends Resource
class_name InventoryItem # Facilite l'utilisation des items dans d'autres scripts
@export var name: String # Nom de l'item
@export var texture: Texture2D # Texture de l'item
đ Ătape 3 : CrĂ©ation des Items SpĂ©cifiques
- Créer un dossier
items
dansres://inventory/
. -
Créer une ressource
InventoryItem
:- Dans lâinspecteur, clique sur le dossier avec le petit
+
vert. - Recherche
InventoryItem
. -
Remplis les champs comme suit :
- Name :
lifepot
- Texture : Glisse-dépose la texture de la potion.
- Name :
- Sauvegarde sous :
res://inventory/items/lifepot.tres
.
- Dans lâinspecteur, clique sur le dossier avec le petit
- RĂ©pĂšte lâopĂ©ration pour dâautres items (ex:
sword
).
đ Ătape 4 : CrĂ©er une Resource dâInventaire pour le Joueur
-
Créer une nouvelle resource
Inventory
:- Nom :
playerInventory.tres
- Dossier :
res://inventory/
- Nom :
-
Ajouter des items :
- Clique sur lâ
Array
dans lâinspecteur. - Glisse-dĂ©pose
lifepot.tres
etsword.tres
dans lâinventaire.
- Sauvegarde bien !
- Clique sur lâ
đ Ătape 5 : Lier lâInventaire au Joueur
- Ajouter cette ligne au script de ton joueur (
Player.gd
) :
@export var inventory: Inventory # Associer l'inventaire au joueur
-
Dans la scĂšne du joueur :
- Tu verras un champ dĂ©diĂ© pour ajouter lâinventaire dans lâinspecteur.
- Lie
playerInventory.tres
.
đ Ătape 6 : Interface Graphique (Slot GUI)
-
Dans la scĂšne des slots :
- Renomme ton
Sprite2D
contenant les slots :background
. - Ajoute un
Sprite2D
en tant quâenfant et renomme-le :item
.
- Renomme ton
-
Script pour chaque slot (
slot_gui.gd
) :
extends Node
@onready var backgroundSprite: Sprite2D = $background
@onready var itemSprite: Sprite2D = $item
func update_item(item: InventoryItem) -> void:
if !item:
backgroundSprite.frame = 0
itemSprite.visible = false
else:
backgroundSprite.frame = 1
itemSprite.texture = item.texture
itemSprite.visible = true
đ Ătape 7 : Centrage des Items dans les Slots
- Ajoute un
CenterContainer
en tant quâenfant duRootNode
. - Ajoute un
Panel
en tant quâenfant duCenterContainer
. - Déplace ton
item
(le Sprite2D) Ă lâintĂ©rieur duPanel
. - Ajuste la taille du
CenterContainer
pour correspondre Ă ses enfants. - Dans lâinspecteur, utilise
Layout â Custom Min Size
pour ajuster la taille. - Réinitialise la position du
Sprite2D
item
Ă(0, 0)
pour quâil soit bien centrĂ©.
đĄ Nâoublie pas de mettre Ă jour les chemins si nĂ©cessaire, comme par exemple :
@onready var itemSprite: Sprite2D = $CenterContainer/Panel/item
đ Conclusion
đ Bravo ! Tu as maintenant un inventaire qui affiche dynamiquement les items collectĂ©s, parfaitement centrĂ©s dans les slots. Câest clean et ça marche super bien ! đȘ
Continue de tâĂ©clater dans ton dĂ©veloppement ! đžđ±âđ€
đ Ătape 12 : ImplĂ©menter la fonction insert()
dans inventory.gd
Nous allons maintenant faire en sorte que la fonction insert()
ajoute vraiment les items Ă notre inventaire.
đ Modification de inventory.gd
Remplace la fonction insert()
par ceci :
func insert(item: InventoryItem):
if item and not items.has(item):
items.append(item)
print("â
Item ajouté : ", item.name)
â Explications :
- On vĂ©rifie si lâitem est valide (
item
nâest pasnull
). - On sâassure que lâitem nâest pas dĂ©jĂ dans lâinventaire (
not items.has(item)
). - On lâajoute Ă lâinventaire avec
append()
. - On affiche un message de confirmation dans la console.
đ Ătape 13 : CrĂ©er un systĂšme de collecte dâobjets
Nous allons faire en sorte que lorsque Elara touche un objet (lifepot
), cet objet soit ajouté à son inventaire.
đ Modification de collectable.gd
Modifions notre script collectable.gd
pour détecter les collisions :
extends Area2D
@export var itemRes: InventoryItem # Référence à notre item (par exemple : lifepot.tres)
func _on_Area2D_body_entered(body):
if body.has_method("insert") and itemRes:
body.insert(itemRes)
queue_free()
â Explications :
body.insert(itemRes)
appelle la fonctioninsert()
du joueur pour ajouter lâitem.queue_free()
dĂ©truit lâobjet (lifepot
) aprĂšs lâavoir collectĂ©.
đ Ătape 14 : Connecter le signal body_entered
Dans lâinspecteur de ton objet lifepot
(ou tout autre collectable) :
- Sélectionne ton Area2D.
- Va dans lâonglet Node > Signals.
- Connecte le signal
body_entered
Ă ton scriptcollectable.gd
. - Vérifie que ta fonction
_on_Area2D_body_entered
est bien appelée.
đ Ătape 15 : Tester lâajout dâun objet
- Lance ton jeu.
- Fais en sorte quâElara touche le
lifepot
. - Ouvre la console (F8) et vérifie que le message de confirmation apparaßt :
â Item ajoutĂ© : lifepot
đ Bravo ! Tu viens de crĂ©er ton premier systĂšme de loot ! đđź
Veux-tu maintenant que je te montre comment afficher les objets dans ton inventaire UI ? đđâš