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.
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.
Dans Godot, une resource peut être sauvegardée de deux manières différentes :
.tscn). Elle fait partie
intégrante de la scène et n’existe pas en tant que fichier séparé..tres, .res ou
autres).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 :
Make Unique : dans l’inspecteur, cliquez sur la flèche à côté de la resource et sélectionnez “Make Unique”. Cela créera une copie indépendante de la resource lors de l’édition.
Local to Scene : cochez l’option “Local to
Scene” dans les propriétés de la resource. Cette option résout un
problème différent : elle garantit que chaque instance de scène obtienne
automatiquement sa propre copie de la resource à l’exécution. Par
exemple, si vous avez un script qui modifie dynamiquement la taille
d’une RectangleShape2D pendant le jeu (pour un personnage
qui grandit ou rétrécit), sans “Local to Scene”, toutes les instances de
la scène partageraient la même forme de collision et les modifications
affecteraient tous les objets en même temps. Avec “Local to Scene”,
chaque instance garde sa propre forme de collision
indépendante.
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: intLes resources “custom” peuvent être considérées comme
analogues aux ScriptableObjects
d’Unity.