đ 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 ! đžđ±âđ€