📦 Les Resources

Une resource dans Godot, c’est un conteneur de données. Elle n’a pas de comportement à proprement parler, mais elle vient être utilisée par les noeuds.

Par exemple les assets, comme les textures, les modèles 3D, les polices de caractères… etc. sont des resources. Lorsque vous placer des assets dans votre projet, Godot les importe automatiquement en resources. Ces fichiers sont traités et optimisés pour être utilisés efficacement par le moteur. Par exemple, une image PNG importée devient une resource de type Texture2D, un fichier OBJ devient une Mesh, et ainsi de suite.

Mais le concept de resource va plus loin que les assets importés : il s’agit d’un système universel pour encapsuler n’importe quel type de données dans Godot. Par exemple, le noeud de type CollisionShape2D, qui représente une collision pour un objet physique, va contenir une resource de type Shape2D, qui est donc un conteneur des données d’une forme géométrique.

Utilisation des resources

Presque tout ce qui est sauvegardé dans votre projet Godot est une resource. Même les scènes que vous créez sont des resources de type PackedScene.

Resources internes et externes

Dans Godot, une resource peut être sauvegardée de deux manières différentes :

Il est recommandé de sauvegarder une resource de façon externe dans les cas suivants :

À l’inverse, pour des resources très spécifiques à une scène ou des petites resources simples (comme une Shape2D pour un CollisionShape2D), il n’est généralement pas nécessaire de les sauvegarder en tant que fichiers externes.

Vu qu’une resource peut être partagée par plusieurs noeuds, cela signifie que modifier la resource affectera tous les noeuds qui l’utilisent. Ce comportement peut être indésirable dans certains cas où vous souhaitez des variations indépendantes.

Il existe deux solutions selon le contexte :

Resources custom

Au-delà des resources intégrées dans Godot, vous pouvez créer vos propres types de resources personnalisées en écrivant des scripts qui héritent de la classe Resource. Ces resources custom sont particulièrement utiles pour stocker des données de jeu structurées : statistiques de personnages, configurations d’armes, descriptions d’objets, paramètres de génération procédurale, etc.

L’avantage des resources custom est qu’elles peuvent être créées et éditées directement depuis l’éditeur Godot, sauvegardées sur le disque en tant que fichiers .tres (ou .res en binaire), et facilement partagées entre différents noeuds ou scènes. De plus, elles bénéficient du système de sérialisation de Godot, ce qui facilite la sauvegarde et le chargement des données.

Voici un exemple simple de resource custom, représentant un item.

class_name Item
extends Resource

@export var name: String
@export var description: String
@export var icon: Texture2D
@export var price: int

Les resources “custom” peuvent être considérées comme analogues aux ScriptableObjects d’Unity.