La philosophie de conception de Godot

Maintenant que vous avez mis les mains dans le cambouis, parlons de la conception de Godot.

Chaque moteur de jeu est différent et répond à des besoins différents. Non seulement ils offrent une série de fonctionnalités, mais la conception de chaque moteur est unique. Cela conduit à des flux de travail différents et à des façons différentes de former les structures de vos jeux. Tout cela découle de leurs philosophies de conception respectives.

Cette page est là pour vous aider à comprendre le fonctionnement de Godot, en commençant par certains de ses piliers fondamentaux. Il ne s’agit pas d’une liste des fonctionnalités disponibles, ni d’une comparaison de moteurs. Pour savoir si un moteur peut convenir à votre projet, vous devez l’essayer vous-même et comprendre sa conception et ses limites.

Veuillez regarder Discover Godot 3, the Free game engine <https://youtu.be/4v3qge-3CqQ> si vous cherchez un aperçu des fonctionnalités du moteur.

Conception et composition orientées objet

Godot embrasse la conception orientée objet à son cœur avec son système de scène flexible et sa hiérarchie de nœuds. Il essaie de rester éloignés des modèles de programmation stricts pour offrir un moyen intuitif de structurer votre jeu.

D’une part, Godot vous permet de composer ou d’agréger des scènes. C’est comme des préfabriqués imbriqués : vous pouvez créer une scène BlinkingLight et une scène BrokenLantern qui utilise le BlinkingLight. Ensuite, créez une ville remplie de BrokenLanterns. Changez la couleur du BlinkingLight, sauvegardez, et toutes les BrokenLanterns dans la ville se mettront à jour instantanément.

En plus de cela, vous pouvez hériter de n’importe quelle scène.

Une scène de Godot peut être une arme, un personnage, un objet, une porte, une porte, un niveau, une partie d’un niveau… tout ce que vous voulez. Elle fonctionne comme une classe en pur code classique sauf que vous êtes libre de la concevoir en utilisant l’éditeur, en utilisant seulement le code, ou en mélangeant et en faisant correspondre les deux.

C’est différent des préfabriqués que l’on trouve dans plusieurs moteurs 3D car on peut ensuite en hériter et étendre ces scènes. Vous pouvez créer un magicien qui étend votre personnage. Modifiez le personnage dans l’éditeur et le magicien se mettra également à jour. Ça vous aide à construire vos projets afin que leur structure corresponde à la conception du jeu.

image0

Notez également que Godot offre de nombreux types différents d’objets appelés nœuds, chacun avec un but spécifique. Les nœuds font partie d’un arbre et héritent toujours de leurs parents jusqu’à la classe Node. Bien que le moteur comporte des éléments comme des formes géométriques de collision, ils sont l’exception et non la norme.

image1

Sprite est un Node2D, un CanvasItem et un Node. Il a toutes les propriétés et les caractéristiques de ses trois classes mères, comme les transformations ou la possibilité de dessiner des formes personnalisées et de faire un rendu avec un shader personnalisé.

Forfait tout compris

Godot essaie de fournir ses propres outils pour répondre aux besoins les plus courants. Il dispose d’un espace de travail dédié aux scripts, d’un éditeur d’animation, d’un éditeur de tilemap, d’un éditeur de shader, d’un débogueur, d’un profileur, de la possibilité de rechargement à chaud local et sur des périphériques distants, etc.

image2

L’objectif est d’offrir un package complet pour créer des jeux et une expérience utilisateur continue. Vous pouvez toujours travailler avec des programmes externes tant qu’il existe un plugin d’importation. Ou vous pouvez en créer un, comme le Tiled Map Importer.

C’est aussi en partie pour cela que Godot propose ses propres langages de programmation GDscript et VisualScript, parallèlement à C#. Ils ont été conçus pour les besoins des développeurs et des designers de jeu, et sont étroitement intégrés au moteur et à l’éditeur.

GDscript vous permet d’écrire du code simple en utilisant une syntaxe ressemblant à celle de Python, tout en ayant la capacité de détecter les types et offre un auto-completion de qualité similaire aux auto-complétions disponibles avec des langages statiques. Il est également optimisé pour l’écriture de code orienté gameplay grâce à des types intégrés tels que Vector et Colors.

Il est à noter qu’avec GDNative, vous pouvez écrire du code haute performance en utilisant des langages compilés tels que C, C++, Rust ou Python (en utilisant le compilateur Cython) sans avoir à recompiler le moteur.

image3

VisualScript est un langage de programmation basé sur des noeuds s’intégrant très bien avec l’éditeur. Vous pouvez glisser-déposer des noeuds ou des ressources dans le graphe pour créer de nouveaux blocs de code.

Il est à noter que l’espace de travail pour la 3D ne comporte pas autant d’outils que celui pour la 2D. Vous aurez besoin de programmes externes ou d’extensions pour éditer des terrains, animer des personnages complexes, etc. Godot fourni une API complète pour étendre les fonctionnalités de l’éditeur via du code dans le jeu. Cf. L’éditeur Godot est un jeu Godot ci-dessous.

image4

Un plugin d’éditeur de machine à états dans Godot 2 par kubecz3k. Il vous permet de gérer les états et les transitions visuellement

Libre

Godot propose un code source complètement libre sous licence MIT. Cela veut dire que toutes les technologies qui sont intégrées dans le moteur doivent être sous licence libre également. Pour la plupart, elles sont élaborées à partir de la base des collaborateurs.

N’importe qui peut ajouter des outils propriétaires pour le besoin de leurs projets - ils ne sont simplement pas fournis avec le moteur. Il peut s’agir de NViDia PhysX, Google Admob ou d’un importateur de fichiers FBX. Mais n’importe lequel d’entre eux peut venir sous forme de plugins tiers à la place.

D’autre part, un code source ouvert signifie que vous pouvez apprendre et étendre le moteur autant qu’il vous plaira. Vous pouvez également déboguer facilement les jeux car Godot affichera les erreurs avec une trace de la pile, même si elles proviennent du moteur lui-même.

Note

Cela n’affecte en rien le travail que vous faites avec Godot* : il n’y a aucune condition attachée au moteur ou à tout ce que vous en faites.

Géré par une communauté

Godot est fait par sa communauté, pour la communauté et pour tous les créateurs de jeux. Ce sont les besoins des utilisateurs et les discussions ouvertes qui déterminent les mises-à-jour critiques. Les nouvelles fonctionnalités apportées par les développeurs du cœur du moteur se focalisent souvent sur ce qui profitera d’abord au plus grand nombre d’utilisateurs.

Cela dit, bien qu’une poignée de développeurs y travaillent à plein temps, le projet compte plus de 600 collaborateurs au moment de la rédaction. Des programmeurs bénévoles travaillent sur des fonctions dont ils peuvent avoir besoin eux-mêmes, de sorte que vous verrez des améliorations partout dans le moteur à chaque mise à jour majeure.

L’éditeur Godot est un jeu Godot

L’éditeur Godot fonctionne sur le moteur de jeu. Il utilise le propre système d’interface utilisateur du moteur, il peut recharger à chaud du code et des scènes lorsque vous testez vos projets, ou exécuter du code de jeu dans l’éditeur. Cela signifie que vous pouvez utiliser le même code et les mêmes scènes pour vos jeux, ou construire des plugins et étendre l’éditeur.

Cela conduit à un système d’interface utilisateur fiable et flexible car l’éditeur lui-même est construit avec. Avec le mot-clé tool, vous pouvez exécuter n’importe quel code de jeu dans l’éditeur.

image5

RPG in a Box est un éditeur RPG (Jeux de rôle) en style voxel réalisé avec Godot 2. Il utilise les outils d’interface utilisateur de Godot pour son système de programmation par nœuds et pour le reste de l’interface.

Mettez le mot-clé tool au début de n’importe quel fichier GDScript et il s’exécutera dans l’éditeur. Cela vous permet d’importer, d’exporter, de créer des plugins comme des éditeurs de niveau personnalisé ou bien de créer des scripts avec les mêmes nœuds et API que vous utilisez dans vos projets.

Moteurs 2D et 3D séparés

Godot propose des moteurs de rendu 2D et 3D dédiés. Du fait, l’unité de base pour les scène 2D est le pixel. Même si les moteurs sont séparés, vous pouvez faire un rendu 2D en 3D, 3D en 2D, et superposer des sprites 2D et une interface sur votre monde 3D.