De Unity à Godot - Partie 2 : Écrire des scripts sous Godot
Ce guide présente comment migrer en douceur de Unity vers Godot (version .NET supportant C#). Dans cette seconde partie, nous montrons comment fonctionnent les scripts C# sous Godot au regard de Unity et comment retrouver vos marques.
➤ Comment utiliser C# avec Godot ?
➤ Retrouver l'équivalent d'une fonction Unity sous Godot
➤ Retrouver les événements disponibles pour un nœud
➤ Détecter le survol de la souris
— réalisé par Anthony Cardinale, auteur de plusieurs livres sur Unity et du livre sur Godot "Développer des jeux avec Godot 4 et le langage C#"
Comme avec Unity, Godot propose deux parties distinctes :
- l’éditeur WISIWIG qui permet de construire les scènes 2D ou 3D ;
- l’éditeur de code qui permet d’écrire les scripts.
Avec Unity, l’éditeur de code 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 en 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 GDScript (c’est du Python), le langage C#, le C++ et un langage visuel :
ÉCRIRE SES SCRIPTS EN C# SOUS GODOT
Attention, pour développer avec le langage C# sous Godot, vous devez télécharger la version .NET de l’éditeur. En effet, Godot est disponible en deux versions : la classique et la version .NET :
Il vous faut aussi 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.
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 GDScript 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).
Selon différents benchmarks, C# serait 4 fois plus rapide que GDScript :
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 cette 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 :
CODE DE BASE DANS GODOT ET ÉQUIVALENCES DANS UNITY
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’équivalent 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 MonoBehaviour. 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 le 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.
COMMENT ASSOCIER UN ÉVÉNEMENT À UN NŒUD
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.
DÉTECTER LE SURVOL DE LA SOURIS
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 connaît bien Unity pourra facilement se lancer sur Godot, car si vous savez quelle fonction Unity utiliser, alors il est simple de trouver l’équivalent 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 inconvénients. 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.
De Unity à Godot - Partie 1 : Prise en main du logiciel
Voir aussi
➤ Godot Engine : un moteur de jeu puissant, intuitif et libre
➤ Livre d'Anthony Cardinale: Développer des jeux avec Godot 4 et le langage C#