Créer un système de dialogue dans Godot avec GDScript



Dans le domaine de la création de jeux vidéo, un gameplay captivant et une narration immersive sont indispensables pour forger des aventures inoubliables. Un mécanisme puissant à votre disposition pour atteindre cet objectif est un système de dialogues.

Avec un système de dialogues bien conçu, les personnages peuvent échanger, diffuser des informations et interagir avec le joueur, ce qui enrichit la profondeur et l’immersion de votre jeu.

Configuration de votre projet Godot

Initiez votre projet en établissant les fondations de votre jeu. À titre d’exemple, mettez en place un environnement 2D simple avec un personnage contrôlable se déplaçant à l’aide des touches directionnelles.

Le code source utilisé dans cet article est accessible via ce dépôt GitHub et est librement utilisable sous licence MIT.

Commencez par générer une nouvelle scène pour votre personnage joueur. Dans cette scène, incorporez les composantes nécessaires. Créez un nœud CharacterBody2D pour incarner le corps du personnage. Attachez un CollisionShape2D avec une forme rectangulaire pour définir la zone de collision du joueur.

À présent, implémentez le mouvement du personnage et l’interaction avec les plateformes via GDScript. Remplacez le script par défaut du nœud CharacterBody2D par le code suivant :

 extends CharacterBody2D
var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1
    if Input.is_action_pressed("ui_right"):
        input_dir.x += 1
    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1
    if Input.is_action_pressed("ui_down"):
        input_dir.y += 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

Ce script autorise votre personnage à se déplacer à gauche, à droite, en haut et en bas en fonction des saisies des touches fléchées. La fonction move_and_collide veille à ce que le personnage interagisse avec les plateformes et réagisse aux collisions.

Ajout de la fenêtre de dialogue

Vous pouvez maintenant entamer la création du système de dialogues. La première étape consiste à ajouter une fenêtre de dialogue qui présentera du texte lorsque votre personnage interagira avec des objets ou des PNJ spécifiques.

Dans votre script CharacterBody2D, introduisez quelques variables additionnelles pour administrer la fenêtre de dialogue et son contenu :

 var dialogue_box: Label
var close_button: Button
var dialogue_lines: Array = ["Bonjour, aventurier !", "Bienvenue dans notre village."]
var current_line: int = 0
var line_timer: float = 0

La fenêtre de dialogue sera chargée d’afficher le texte du dialogue, tandis que le bouton close_button permettra aux joueurs de fermer la fenêtre de dialogue lorsque nécessaire.

Dans la fonction _ready, créez et initialisez la fenêtre de dialogue :

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box)

Affichage du texte de dialogue

Vous pouvez désormais vous concentrer sur l’affichage du texte dans la fenêtre de dialogue. Vous pouvez faire en sorte que le texte s’étende sur plusieurs lignes et le faire défiler, révélant une ligne de texte à la fois.

Modifiez votre fonction _physics_process pour gérer l’affichage des lignes de dialogue :

 if line_timer > 0:
    line_timer -= delta
elif current_line < dialogue_lines.size():
    show_next_dialogue_line()

Ce fragment de code vérifie si line_timer est supérieur à 0. Si tel est le cas, il diminue le timer de la valeur delta. Si le minuteur n’est pas actif et qu’il y a d’autres lignes de dialogue à afficher, il appelle la fonction show_next_dialogue_line.

Implémentez la fonction show_next_dialogue_line comme suit :

 func show_next_dialogue_line():
    dialogue_box.text = dialogue_lines[current_line]
    current_line += 1
    line_timer = 3.0

Cette fonction met à jour le texte dans la fenêtre de dialogue avec la ligne de dialogue actuelle et incrémente l’index current_line. Le line_timer s’assure que chaque ligne est affichée pendant une courte durée avant de passer à la ligne suivante.

Ajout d’un bouton de fermeture

À présent, vous pouvez offrir aux joueurs la possibilité de fermer la fenêtre de dialogue et de poursuivre leur jeu. Mettez ceci en œuvre à l’aide d’un bouton de fermeture qui, lorsqu’il est cliqué, masque la fenêtre de dialogue et permet au joueur de continuer son aventure.

Tout d’abord, modifiez la fonction _ready pour générer un bouton de fermeture et lui affecter sa fonctionnalité.

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box)
    close_button = Button.new()
    close_button.text = "Fermer"
    close_button.position = Vector2(50, 30)
    close_button.visible = false
    close_button.pressed.connect(_on_close_button_pressed)
    add_child(close_button)

Ce code instancie la classe Button et personnalise son apparence et son positionnement. Il connecte également le signal enfoncé à la fonction _on_close_button_pressed.

Implémentez maintenant la fonction _on_close_button_pressed. Dans cette fonction, réglez la visibilité de la fenêtre de dialogue et du bouton de fermeture sur false. Cela masque efficacement l’interface de dialogue au joueur.

N’oubliez pas de remettre l’index current_line à 0 pour garantir que le dialogue recommence depuis le début lors de la prochaine conversation engagée par le joueur :

 func _on_close_button_pressed():
    dialogue_box.visible = false
    close_button.visible = false
    current_line = 0

Grâce à ces modifications, les joueurs pourront engager un dialogue et fermer la fenêtre de dialogue lorsqu’ils seront prêts à poursuivre leur exploration ou leurs interactions avec le monde du jeu.

Recommandations pour votre système de dialogues

À mesure que vous continuez à développer et à perfectionner votre système de dialogues, gardez à l’esprit les bonnes pratiques suivantes pour vous assurer que votre système optimise la narration de votre jeu et l’engagement des joueurs.

La cohérence est primordiale

Maintenez un ton, un style d’écriture et un vocabulaire cohérents tout au long de votre système de dialogues. La cohérence permet aux joueurs de s’identifier aux personnages et au monde du jeu, ce qui crée une expérience fluide et immersive.

Concevoir des voix de personnages

Chaque personnage doit avoir une voix et une personnalité distinctives qui se reflètent dans ses dialogues. Tenez compte de son histoire, de ses motivations et de ses émotions lorsque vous rédigez ses répliques.

Cette différenciation apporte de la profondeur à vos personnages et rend les interactions plus mémorables. Vous pouvez facilement ajouter différents sons pour différents personnages dans Godot.

Des choix significatifs

Concevez des choix de dialogue qui ont des conséquences importantes. Les choix qui influencent le récit du jeu, les relations ou même les mécanismes de jeu incitent les joueurs à s’engager dans le système de dialogue et à s’investir émotionnellement dans leurs décisions.

Tests et itérations

Testez minutieusement vos séquences de dialogues pour détecter les coquilles, les erreurs de grammaire ou les problèmes de rythme. Participez à des sessions de test pour recueillir les commentaires des joueurs et apporter les ajustements nécessaires pour garantir que le système de dialogue se déroule sans accroc et améliore l’expérience globale du jeu.

Cohérence de l’interface utilisateur

Veillez à ce que la conception et la présentation du système de dialogue soient en accord avec la conception générale de l’interface utilisateur de votre jeu. L’uniformité des éléments de l’interface utilisateur, des polices et des couleurs crée une expérience visuelle cohérente qui renforce l’immersion dans le jeu.

En respectant ces recommandations, vous pouvez construire un système de dialogues qui non seulement enrichit la narration de votre jeu, mais aussi crée une expérience inoubliable et immersive pour les joueurs.

Sublimez vos jeux Godot avec des systèmes de dialogues

L’intégration d’un système de dialogues dans vos jeux Godot peut améliorer l’engagement des joueurs et transformer votre manière de raconter des histoires. En permettant aux personnages de communiquer, d’exprimer leurs émotions et de répondre aux choix des joueurs, vous façonnez un univers de jeu plus immersif et interactif.

Avec l’environnement intuitif de Godot et la puissance de GDScript, vous disposez des instruments nécessaires pour créer des systèmes de dialogues captivants qui attirent les joueurs dans votre récit et perfectionnent leur expérience de jeu globale.