Les noeuds (ou nodes en anglais) sont les briques de base servant Ă construire un jeu dans Godot.
Ces noeuds sont organisés en arborescence, et forment ensemble les différentes entités et systèmes du jeu. En somme, un jeu Godot, c’est un arbre de noeuds.
Les noeuds sont similaires aux
GameObjects dans Unity, dans le sens oĂą
les deux sont utilisés pour composer des arborescences.
La grande différence, c’est que dans Godot un noeud a un type : il est quelque chose. Il dispose directement d’un ensemble de propriétés et de comportements.
Dans Unity, un GameObject est plutĂ´t
une sorte de conteneur vide auquel on vient attacher des
composants.
Comme évoqué ci-dessus, les noeuds sont typés, et chaque type de noeud vient avec son ensemble de propriétés et de comportements. Le type d’un noeud dicte son rôle. Par exemple :
Sprite2D sert Ă afficher une texture
2D.AudioStreamPlayer sert Ă lire de
l’audio.RigidBody2D représente un corps soumis
Ă la physique.Le typage des noeuds suit le principe de polymorphisme par
hĂ©ritage : un type de noeud hĂ©rite forcĂ©ment d’un autre, Ă
l’exception du type de base Node.
Par exemple : Sprite2D ⊂ Node2D ⊂ CanvasItem ⊂ Node
Naturellement, un type de noeud hérite des propriétés et des fonctionnalités fournies par ses super-types.
Les noeuds étant organisés en arborescence, ils forment une
hiérarchie parent-enfant.
Chaque noeud (sauf la racine) possède un parent, et
peut lui-mĂŞme avoir des enfants.
Cette organisation vient avec plusieurs spécificités.
Tout d’abord, la structure peut être parcourue en utilisant des chemins, un peu comme pour les fichiers.
Soit l’arbre de noeuds suivant :
World
└─ Player
├─ Collision
└─ Body
└─ Hat
Player/Body/Hat.../../Collision.À la racine de l’arbre du jeu se trouve toujours un noeud spécial
appelé root (présent sur les figures
précédentes).
Il est accessible via le chemin absolu /root et correspond
Ă la fenĂŞtre du jeu.
La structure d’arbre apporte une deuxième caractéristique essentielle : la gestion des transformations hiérarchiques pour les noeuds 2D et 3D.
La transformation de chaque noeud se fait relativement Ă son
parent.
Par exemple, le positionnement des enfants se fait relativement au
repère issu de la transformation du parent : si le parent se
déplace, tourne ou change
d’échelle, ses enfants suivent le mouvement.
L’arborescence détermine également d’autres aspects du comportement
des noeuds, comme l’ordre d’exécution et la
propagation des événements.
Ces spécificités seront explorées durant le workshop.
Le deuxième concept fondamental de Godot, ce sont les scènes, étroitement liées aux noeuds : une scène, c’est une collection de noeuds.
C’est un arbre de noeuds configuré d’une certaine façon, que l’on
enregistre dans un fichier (d’extension
.tscn ou .scn).
Une scène possède toujours un noeud racine, qui est le parent de tous les autres noeuds de cette scène.
Une scène peut représenter un joueur, un ennemi, un niveau ou tout autre élément du jeu. C’est à nous de définir le niveau de granularité.
Les scènes ont vocation à être composées ensemble pour former des arborescences plus complexes.
Ce processus s’appelle l’instanciation de scènes.
En fait, une scène est le « plan » de construction
d’un arbre de noeuds.
À l’exécution du jeu, il n’y a plus de scènes à proprement parler, mais
une unique arborescence de noeuds, composée de
différents sous-arbres pouvant être des instances de
scènes.
En pratique, ce système permet :
Les scènes Godot sont différentes des scènes Unity. Elles sont plutôt comparables aux Prefabs.
Voici un exemple de scène représentant un joueur.
Sa racine est un noeud de type CharacterBody2D, un corps
physique destiné à être contrôlé par l’utilisateur.
Parmi les noeuds enfants, on peut notamment trouver :
CollisionShape2D, qui définit la collision
utilisée par son parent.Camera2D, qui fait défiler l’écran en suivant
le noeud parent.Node2D, qui
regroupe les éléments formant le personnage.On identifie aussi des instances d’autres scènes :
hand.tscn.sword.tscn.