Les noeuds (ou nodes en anglais) sont les briques de base servant à construire un jeu dans Godot. Ces noeuds sont organisés en arborescence, qui forment alors 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. Alors que dans
Unity un GameObject est une sorte de
coquille vide dans laquelle on va venir 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 vient dicter son rôle. Par exemple :
Sprite2D sert Ă afficher une texture
2DAudioStreamPlayer 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.
Le fait que les noeuds soient organisés en arborescence, signifie qu’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 naviguée 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),
accessible via le chemin absolu /root, il s’agit de 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 va se faire relativement à son parent. Par exemple, le positionnement des enfants va se faire relativement au repère découlant de la transformation du parent.
L’arborescence détermine également plusieurs autres aspects du comportement des noeuds tels que 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, qui sont étroitement liées aux noeuds : une scène c’est une collection de noeuds. C’est un arbre de noeuds configurés d’une certaine façon, que l’on enregistre dans un fichier.
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 donc 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 venir former des arborescences plus complexes. Ce processus s’appelle l’instanciation de scènes.
En fait, une scène c’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 qu’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 ressemblent davantage au concept de Prefabs.
Voici un exemple d’une scène représentant un joueur. Sa racine est un
noeud de type CharacterBody2D qui est 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.