Développement de jeux avec Godot 🪦

Skip to content

Ceci est un texte traduit automatiquement qui peut contenir des erreurs !

D’où viennent ces informations ?

Beaucoup de ceci n’est qu’une reformulation de la documentation officielle de Godot. Vous trouverez ci-dessous quelques liens utiles vers la documentation officielle (que je vous recommande vivement par rapport à celle-ci sur Piggy, mais si vous préférez celle-ci, n’hésitez pas à l’utiliser !)

Ressources utiles :

Qu’en est-il des graphismes, dois-je les créer moi-même ?

Non ! Vous pouvez trouver de nombreux assets gratuits ici :

Autres liens utiles :

Autres moteurs de jeu ?

Si vous préférez, vous pouvez utiliser d’autres moteurs de jeu. Des exemples d’autres moteurs de jeu sont :

Il existe beaucoup d’autres également, n’hésitez pas à chercher si vous souhaitez essayer autre chose !

Qu’est-ce que Godot ?

Godot (se prononce « Gou-do ») est un moteur de jeu. Pour faire simple, c’est un programme qui vous permet de créer des jeux vidéo (ou des applications classiques, selon vos envies). Godot peut réaliser la plupart des tâches qu’accomplissent les autres moteurs de jeu, tant pour le 2D que pour le 3D.

Exemples de jeux créés avec Godot : Showcase Godot

Il ne s’agit pas uniquement de jeux indépendants ; Sonic Colors Ultimate a également été développé avec Godot ! 🦔🦔🦔

Comment obtenir Godot ?

Vous pouvez télécharger Godot à partir de :

Il suffit de le télécharger et de l’installer (ou de lancer depuis Steam).

Mettre en place un projet !

Lorsque vous démarrez Godot, vous obtenez cette fenêtre :

Godot Projet

Ici, on vous demande quel langage de programmation utiliser, GDScript ou C#. GDScript est très similaire à Python.

Différences entre GDScript et Python (sans couleurs) :

def hello():
    text = "Hello world!"

    print(text)
func hello():
    var text = "Hello world!"

    print(text)

Pour les variables en Python, vous n’avez besoin que d’écrire le nom de la variable. En GDScript, vous devez écrire var en premier. Pour créer des fonctions, vous écrivez func au lieu de def.

Scènes et Nœuds

L’un des concepts clés dans Godot est celui des scènes et des nœuds. Commençons par les nœuds. Un nœud est un objet dans Godot qui peut représenter tout type d’entité : il s’agit notamment du joueur, d’un ennemi, d’un bouton dans un menu ou encore du texte affiché à l’écran, entre autres possibilités. Les scènes sont constituées d’une collection de nœuds.

Dans cette partie nous allons créer un exemple très simple.

Partie 1a - Configurer la scène “player”

En haut de la fenêtre Godot, cliquez sur le bouton “2D” pour modifier la vue en vue 2D.

Sur le côté gauche de la fenêtre, vous voyez l’interface suivante :

Create Scene

Cliquez sur le bouton “Other Node”, puis recherchez “CharacterBody2D”, sélectionnez-le et cliquez sur “Create”. Il s’agit d’un nœud utilisé pour un joueur 2D. Vous remarquerez peut-être qu’il y a un triangle d’avertissement ⚠️ à côté du nœud “CharacterBody2D”. C’est parce qu’il manque quelques éléments qu’il aimerait avoir.

Si vous faites un clic droit sur le nœud, il y a un bouton “+ Add Child Node…”. Utilisez-le pour ajouter deux nœuds, Sprite2D et CollisionShape2D. Sprite2D est utilisé pour ajouter des graphismes au joueur, tandis que le second est utilisé pour vérifier les collisions. Vous pouvez également leur donner des noms si cela vous aide à vous y retrouver. J’ai donné à mon CharacterBody2D le nom “Player”. La scène devrait maintenant ressembler à ceci :

Scene currently

Del 1b - Corriger ⚠️ sur CollisionShape2D

Le triangle d’avertissement dans ce cas est que le CollisionShape2D n’a pas de collision réelle. Vous pouvez corriger cela en cliquant sur le nœud (à gauche), ce qui fera apparaître un panneau sur le côté droit. Ici, vous trouverez une multitude d’informations sur le nœud que vous pouvez modifier. N’hésitez pas à expérimenter avec ce qui s’y trouve. Mais celui sur lequel nous allons nous concentrer est “Shape”, définissez-le par exemple sur RectangleShape2D. Ce n’est pas très important, nous n’allons pas utiliser les collisions ici.

Partie 1c - Ajouter un Sprite, graphique

Si vous cliquez sur Sprite2D à gauche, le champ à droite apparaît, où il est écrit “Texture”. Vous pouvez y insérer une image pour le joueur. Il suffit de glisser-déposer une image dans le champ.

Voilà à quoi cela ressemblera après avoir ajouté un sprite.

Menu Sprite

Partie 2 – Ajouter l’entrée et vérifier

En haut de la fenêtre se trouve un menu : « Scène » > « Projet » > « Déboguer » > « Éditeur » > « Aide ». Cliquez sur « Projet », puis sur « Paramètres du projet ». Vous accédez ainsi à une liste de nombreuses options. Sélectionnez « Mappage des entrées (Input Map) ». C’est ici que vous pouvez configurer les touches du clavier.

  • Dans le champ « Nouvelle action (New Action) », saisissez « left », puis cliquez sur « Ajouter (Add) ».
  • Ajoutez ensuite « right », « up » et « down ».
  • Ces éléments sont appelés « Actions ».
  • Pour chaque « Action », ajoutez des boutons en cliquant sur le bouton + situé à droite.

Bouton Plus

  • Appuyez simplement sur une touche du clavier, puis cliquez sur « Ajouter (Add) ».
  • Ajoutez des boutons pour toutes les actions.

Partie 3 - Ajouter un script pour contrôler le joueur.

Pour pouvoir ajouter de la logique de jeu, c’est-à-dire faire quelque chose avec le joueur, l’arrière-plan, ou quoi que ce soit dans le jeu, nous avons besoin d’un script. Les scripts sont du code, et peuvent être écrits dans deux langages, GDScript ou C#, GDScript est le langage par défaut.

  • Appuyez sur le nœud “CharacterBody2D” (je l’ai appelé “Player”).
  • Appuyez sur le bouton “Attach Script” (voir ci-dessous)

Attach script button

  • Ici, une fenêtre s’affiche où vous pouvez choisir le langage (choisissez GDScript) et un chemin (laissez-le simplement avec le nom par défaut, mais vous pouvez lui donner un nom), puis cliquez sur “suivant”. Ici, une fenêtre “Script” s’affiche. Il n’y a pas grand-chose ici pour commencer.

extends CharacterBody2D

La seule chose que ce code indique pour le moment est que le code doit appartenir à un nœud de type “CharacterBody2D”, qui est notre joueur.

Nous allons ajouter une fonction ici que nous utiliserons pour manipuler le joueur :

extends CharacterBody2D

func _physics_process(delta: float) -> void:
    return

Processus Physique ?

_physics_process est une fonction qui est mise à jour à chaque “frame”, soit environ 60 fois par seconde (par défaut). Il existe une autre fonction qui s’appelle simplement _process, qui est mise à jour tout le long. Si vous voulez que le joueur se déplace à un rythme régulier, utilisez _physics_process.

C’est ici que nous allons ajouter le code qui déplace le joueur.

Partie 4 – Saisie de base

Dans le chapitre précédent, vous avez ajouté des boutons d’entrée ; nous allons maintenant les utiliser. Il existe un objet intégré appelé Input, que l’on peut employer pour vérifier si le joueur a appuyé sur ce qui est configuré dans « InputMap ».

Essayez d’insérer ce code dans votre méthode _process_physics() :

if Input.is_action_pressed('right'):
    velocity.x = 100

move_and_slide()

Qu’est-ce que move_and_slide() ?

move_and_slide() est une fonction intégrée dans Godot qui est utilisée lorsque nous voulons réellement déplacer ce sur quoi nous l’appliquons. Sans cela, le joueur ne se déplacerait pas.

Warning

L’espacement sur les lignes est très important, cela ressemble à ce que l’on trouve en Python.

Que se passe-t-il lorsque vous lancez le programme en appuyant sur le bouton de lecture dans la fenêtre Godot, puis que vous appuyez sur « right » ?

Si rien ne se produit :

  • Avez-vous bien configuré quelque chose dans l’« Input Map » (carte des entrées) ?
  • Avez-vous écrit right et non Right ? Autrement dit, est-ce que ce que vous avez saisi dans le code correspond exactement au nom défini dans la carte des entrées ?

Tout le code jusqu’à présent
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100

    move_and_slide()

Essayons maintenant d’ajouter du code pour 'left', 'up', 'down'.

Qu’est-ce que velocity.x doit être pour left ? Et pour up et down ?

Tout le code maintenant
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

Partie 5 – Corriger le code

Vous avez peut-être remarqué que le personnage ne s’arrête pas lorsque vous relâchez une direction. Nous pouvons corriger cela maintenant !

Avant tous les blocs if, ajoutez une ligne qui réinitialise la vélocité à 0. Vous pouvez faire ceci en écrivant velocity = Vector2()

Toutes les vitesses et directions dans Godot sont des vecteurs. Il s’agit d’un concept mathématique sur lequel nous n’allons pas entrer ici pour l’instant, mais si vous souhaitez savoir ce que cela signifie exactement, consultez : Vecteur euclidien - Wikipédia (anglais) .

Tout le code maintenant
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    velocity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

Lorsque vous démarrez le jeu maintenant, vous pouvez déplacer le personnage :

Par la suite, vous pouvez modifier le code pour que la vitesse ne soit pas qu’un nombre, mais puisse être stockée ailleurs.

Vous pouvez par exemple (avant la fonction) ajouter une constante qui garde la trace de la vitesse.

Tout le code à la fin avec const
extends CharacterBody2D

const SPEED = 100

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = SPEED
    if Input.is_action_pressed('left'):
        velocity.x = -SPEED
    if Input.is_action_pressed('down'):
        velocity.y = SPEED
    if Input.is_action_pressed('up'):
        velocity.y = -SPEED

    move_and_slide()

Partie 6 - Jouez et expérimentez par vous-même !

Si vous retournez à la première partie, Ressources Utiles, vous pouvez y trouver ce avec quoi vous pouvez continuer à jouer.

Après cela, vous pouvez essayer de créer votre propre jeu. Ce que vous créez vous appartient ! Si vous voulez créer quelque chose de complètement nouveau, faites-le ! Si vous voulez essayer d’imiter un jeu qui existe déjà, faites-le ! La meilleure façon d’apprendre est d’essayer !