Migrer de Unity vers Godot

Basculez de Unity à Godot facilement grâce à ce guide de migration Unity > Godot

Migrer de Unity vers 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

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

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

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

Une image contenant texte, capture d’écran, logiciel, Icône d’ordinateur

L’interface

Une image contenant ordinateur, capture d’écran, logiciel, Logiciel multimédia

Une image contenant capture d’écran, texte, logiciel, Logiciel multimédia

É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 :

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

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 :

Une image contenant texte, capture d’écran, Police, nombre

Cette scène peut ensuite être enregistrée afin d’être par la suite instanciée et donc réutilisée :

Une image contenant texte, capture d’écran, nombre, logiciel

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 :

Une image contenant texte, capture d’écran, Police, logiciel

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 :

Une image contenant texte, logiciel, capture d’écran, Logiciel multimédia

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 image contenant texte, capture d’écran, logiciel, Logiciel multimédia

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 :

Une image contenant texte, capture d’écran, Police, nombre

Une image contenant texte, capture d’écran, logiciel, multimédia

Le cube est alors visible :

Une image contenant art

 avec une confiance faible

 

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 :

Une image contenant texte, capture d’écran, Police, logiciel

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 :

Une image contenant texte, capture d’écran, logiciel, multimédia

 

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 » :

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

Choisissez « RigidBody3D ». Faites ensuite glisser le nœud CollisionShape3D sous le nœud principal :

Une image contenant texte, capture d’écran, Police, nombre

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 » :

Une image contenant texte, capture d’écran, logiciel, multimédia

Pour instancier la scène (utiliser le prefab), utilisez l’icône suivant :

Une image contenant texte, Police, capture d’écran, nombre

Attention, vous ne pouvez pas instancier une scène dans elle-même. Créez une nouvelle scène vide pour tester l’instanciation :

Une image contenant texte, capture d’écran, Police, nombre

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 » :

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

Les langages de programmation supportés par Godot sont GD Script (c’est du python), le langage C#, le C++ et un langage visuel :

Une image contenant texte, capture d’écran, diagramme, logiciel

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 :

Une image contenant texte, capture d’écran

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 image contenant texte, capture d’écran, Police

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 :

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

On peut également créer un script à la volée via cet icône :

Une image contenant texte, capture d’écran, Police, Logiciel multimédia

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 :

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

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()

Print

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 » :

 

Une image contenant texte, capture d’écran, logiciel, nombre

 

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 :

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

 

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 :

 

Une image contenant texte, capture d’écran, Police, nombre

 

Une image contenant texte, Police, capture d’écran

 

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

Tags : Unity, Godot