Migrer de Unity vers Godot
Basculez de Unity à Godot facilement grâce à ce guide de migration Unity > Godot
De Unity à Godot
Partie 1 : Prise en main du logiciel
Ce guide présente comment migrer en douceur de Unity vers Godot (version .NET supportant C#).
Unity HUB vs Gestionnaire de projets Godot
Unity HUB permet de gérer ses projets, de créer un nouveau projet et d’installer plusieurs versions de Unity en parallèle.
Le gestionnaire de projets de Godot permet de faire sensiblement la même chose mais ne permet pas de visualiser les différentes installations de Godot dont vous disposez. Cependant, vous pouvez ouvrir un projet réalisé sur une version différente de Godot et le gestionnaire se chargera de faire la conversion.
Création d’un projet
L’interface
Équivalences
Unity |
Godot |
Hierarchy |
L’arbre de scène / Scene tree |
Project |
Système de fichiers / File system |
Scene |
Scène |
Inspector |
Inspecteur / Inspector |
L’interface de Godot est assez similaire à celle d’Unity. Les fenêtres peuvent être agencées à votre guise.
La particularité de Godot c’est que tout tourne autour du système de nœuds (contrairement à Unity qui fonctionne avec des « components »). Plusieurs nœuds imbriqués forment un arbre. Lorsqu’on parle de Scene tree, on parle de la liste des nœuds de la scène.
Dans Godot, les liens de parenté sont très importants. Encore plus que sous Unity. Pour construire une scène, nous créons des nœuds qui forment des branches puis un arbre de scène.
Exemple d’arbre :
Dans Unity, lorsqu’on souhaite réutiliser un objet de jeu, on crée ce que l’on appelle un « prefab ». Dans Godot nous avons un système similaire mais qui se manifeste différemment.
Pour créer quelque chose d’équivalent à un prefab, nous devons créer une scène qui aura ses propres nœuds. Par exemple, si j’ai un objet à ramasser (Rigidbody + Mesh + Collider), je vais créer la scène avec l’arbre suivant :
Cette scène peut ensuite être enregistrée afin d’être par la suite instanciée et donc réutilisée :
Donc un prefab c’est une scène qui peut être insérée dans une autre scène.
Créer un nœud
Dans Godot, pour créer un nouveau nœud, il faut cliquer sur le « + » au niveau du scene tree :
Créer un nœud revient à créer un GameObject ou à ajouter un composant à un GameObject.
Lorsqu’on crée un nœud, nous devons choisir la nature de ce nœud :
Par exemple, pour créer un Cube 3D, il faut commencer par créer un MeshInstance3D (l’équivalent d’un Mesh Renderer sous Unity) :
Une fois ce nœud créé, pas grand-chose ne se passe. En effet, il faut préciser le mesh à utiliser en passant par l’inspector :
Le cube est alors visible :
Ajouter un component
Dans Godot, tout fonctionne avec des nœuds. Pour ajouter un composant au cube, nous devons ajouter un nœud enfant. Par exemple, pour ajouter un collider, nous allons sélectionner le nœud CollisionShape3D :
On remarque qu’une alerte apparaît à côté de ce nœud. En réalité, Godot vous demande de toujours préciser les caractéristiques d’un nœud. Lorsque vous ajoutez un CollisionShape, Godot attend que vous précisiez la nature de cette forme de collision. On va donc choisir un BoxShape3D :
Comme pour Unity, Godot fait la distinction entre les nœuds 3D et les nœuds 2D. Donc en général, le nom du nœud se termine par 2D ou 3D selon sa nature. C’est comme pour le Rigidbody ou Rigidbody2D sous Unity.
En parlant de Rigidbody, si on souhaite que le cube soit un Rigidbody (et donc affecté par la gravité), il faut convertir son nœud parent. D’ailleurs, le CollisionShape3D ne peut être enfant que d’un Area ou d’un Body (Rigidbody, Staticbody, Characterbody).
Pour convertir un nœud, faites un clic droit puis choisissez « Changer de type » :
Choisissez « RigidBody3D ». Faites ensuite glisser le nœud CollisionShape3D sous le nœud principal :
Vous pouvez renommer les nœuds afin de mieux vous y retrouver. Ensuite, pour créer un prefab, enregistrez simplement la scène : « Scène / Enregistrer la scène sous » :
Pour instancier la scène (utiliser le prefab), utilisez l’icône suivant :
Attention, vous ne pouvez pas instancier une scène dans elle-même. Créez une nouvelle scène vide pour tester l’instanciation :
Vous pouvez de cette façon construire vos scènes / niveaux et organiser le tout. Sous Godot vous retrouverez des nœuds pour gérer les lumières, les materials, les caméras, les sons, les agents de navigation, les collisions, l’interface utilisateur… N’hésitez pas à parcourir la liste des nœuds ainsi que la documentation pour prendre connaissance des différents nœuds disponibles.
Voilà, vous connaissez les manipulations de base pour créer vos scènes sous Godot.
Partie 2 : Écrire des scripts sous Godot
Comme avec Unity, Godot propose 2 parties distinctes :
- L’éditeur WISIWIG permettant de construire les scènes 2D ou 3D
- L’éditeur de code qui permet d’écrire les scripts
Avec Unity, l’éditeur de code qui est généralement utilisé est Visual Studio et le langage de programmation principal est le C#. Unity dispose aussi d’un langage de programmation visuel appelé « Bolt ». Enfin, il est possible d’utiliser d’autres langages de programmation mais cela se fait à la marge pour des besoins spécifiques.
Godot intègre directement son propre éditeur de code. Vous pouvez écrire vos scripts directement dans le logiciel simplement en cliquant sur l’onglet « Script » :
Les langages de programmation supportés par Godot sont GD Script (c’est du python), le langage C#, le C++ et un langage visuel :
Attention, pour développer avec le langage C# sous Godot, il faut télécharger la version .NET de l’éditeur. En effet, Godot est disponible en 2 versions : la classique et la version .NET :
Le C# a été ajouté assez récemment sous Godot et il est aujourd’hui pleinement supporté. C# a l’avantage d’être plus performant que GD Script et il s’agit d’un langage beaucoup plus répandu dans le monde du développement de jeux vidéo (ce qui facilite la migration de Unity vers Godot).
Il est nécessaire de disposer du kit de développement .NET pour développer avec C# sous Godot. Le SDK est accessible à cette URL : https://dotnet.microsoft.com/download
D’après un benchmark réalisé, C# est 4 fois plus rapide que GD Script :
Une fois Godot installé et votre scène prête, vous pouvez créer votre premier script. Pour cela, rendez-vous sur l’onglet « Script » et créez un script :
On peut également créer un script à la volée via cet icône :
Lorsque vous créez un script, vous devez choisir le langage de programmation. Ici C#. Vous pouvez hériter d’une autre classe (De façon générale, votre script hérite du nœud auquel il est rattaché). Vous devez choisir un nom et un chemin :
Le code de base est le suivant :
using Godot;
using System;
public partial class cube : Node
{
public override void _Ready()
{
}
public override void _Process(double delta)
{
}
}
using Godot; est l’équivallent de using UnityEngine;
Cela permet d’avoir accès aux fonctionnalités spécifiques à l’éditeur.
using System; est identique à ce que nous avons sous Unity.
Avec Unity, les scripts dérivent en général de MonoBahaviour. Sous Godot c’est différent. En général on dérive de la classe du nœud sur lequel on attache le script. Ici Node. Si mon nœud principal avait été un « CharacterBody3D » alors mon script aurait dérivé de cette classe (public partial class Exemple : CharacterBody3D).
Le fait de dériver d’une classe précise nous donne accès aux fonctionnalités de cette classe. Dans le cas d’un CharacterBody3D on aurait accès à des fonctionnalités utiles pour faire marcher un personnage et gérer sa physique.
Par défaut, lorsque vous créez un script, deux fonctions sont présentes :
- _Ready() est l’équivalent de la fonction Start de Unity.
- _Process(double delta) est l’équivalent de la fonction Update. Le paramètre delta a la même intérêt que le delta de Unity.
Quelques équivalences
Unity |
Godot |
Start |
_Ready |
Update |
_Process |
FixedUpdate |
_PhysicsProcess |
OnTriggerEnter |
_on_area_3d_area_entered ou _on_area_3d_body_entered (Sous Godot, le nom de la fonction change selon le type du nœud pour lequel on gère la collision) |
Input.GetKeyDown |
Input.IsActionPressed |
GetComponent |
GetNode |
Destroy(body) |
body.QueueFree() |
|
GD.Print |
IsGrounded |
IsOnFloor |
Input.GetAxis |
Input.GetVector |
Move |
MoveAndSlide |
En réalité, pour chaque fonction de Unity il existe une fonction Godot. Pour facilement trouver un événement qui peut être utilisé avec un nœud, il vous suffit de regarder du côté de l’onglet « Nœud / Signaux » :
Un signal peut être connecté à un nœud. Par exemple, comme le nœud utilisé ici est de type Area3D, j’ai accès à certains signaux comme « area_entered ». Vous pouvez connecter un signal et associer une fonction dans votre script :
Ce qui nous donne :
private void _on_area_entered(Area3D area)
{
// Replace with function body.
}
La création d’un signal permet de déclencher une fonction lorsque le signal est envoyé. Dans ce cas précis, un signal est envoyé si le Area entre en collision avec un Area.
Selon les nœuds qui composent votre scène, vous aurez accès à différents signaux. Par exemple, un collider vous permettra de détecter le survol de la souris :
Conclusion
Godot est un outil assez simple à prendre en main. Il y a beaucoup de similitudes avec Unity et la version .NET du logiciel permet d’utiliser C# ce qui facilite la transition de Unity vers Godot. Quelqu’un qui connais bien Unity pourra facilement se lancer sur Godot car en connaissant les fonctions Unity, il est facile de trouver l’équivalemment Godot via une recherche Google.
Ma principale difficulté (qui sera peut-être aussi la vôtre) ça a été de m’adapter au système de nœuds. Avec Godot, il faut faire plus de manipulations qu’avec Unity pour arriver au même résultat. Cela est dû au fait que sous Godot, chaque nœud doit être ajouté et configuré manuellement. Dans Unity, pour créer un cube, on fait « Create / 3D object / Cube » et le tour est joué. Sur Godot il faut commencer par créer un nœud parent puis ajouter un nœud pour le Shape puis ajouter un autre nœud pour la collision. Si vous voulez changer la couleur il faudra ajouter les nœuds adéquats. Ça a des avantages et des inconvenants. C’est un peu plus fastidieux mais au moins on contrôle chaque composant précisément. C’est déroutant au début, mais avec de la persévérance vous aurez les automatismes.
Pour aller plus loin, regardez du côté de mon guide de démarrage Godot 4 : https://www.formation-facile.fr/tutos/debuter-avec-godot-4