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

Dans le développement de jeux, un gameplay engageant et une narration captivante sont essentiels pour créer des expériences mémorables. Un outil puissant qui peut vous aider à y parvenir est un système de dialogue.

Grâce à un système de dialogue bien mis en œuvre, les personnages peuvent communiquer, partager des informations et interagir avec le joueur, ajoutant ainsi de la profondeur et de l’immersion à votre jeu.

Configurer votre jeu Godot

Commencez par créer les bases de votre jeu. Pour cet exemple, configurez un environnement 2D simple avec un personnage contrôlable qui peut se déplacer à l’aide des touches fléchées.

Le code utilisé dans cet article est disponible dans ce Dépôt GitHub et son utilisation est gratuite sous la licence MIT.

Commencez par créer une nouvelle scène pour votre personnage joueur. Dans cette scène, ajoutez les composants nécessaires. Créez un nœud CharacterBody2D pour représenter le corps du personnage du joueur. Attachez un CollisionShape2D avec une forme rectangulaire pour définir la zone de collision du joueur.

Ajoutez désormais le mouvement des personnages et l’interaction avec les plates-formes à l’aide de 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 permet à votre personnage de se déplacer vers la gauche, la droite, le haut et le bas en fonction des entrées des touches fléchées. La fonction move_and_collide garantit que le personnage interagit avec les plates-formes et répond aux collisions.

Ajout de la boîte de dialogue

Maintenant, vous pouvez commencer à créer le système de dialogue. La première étape consiste à ajouter une boîte de dialogue qui affichera du texte lorsque votre personnage interagit avec des objets ou des PNJ spécifiques.

Dans votre script CharacterBody2D, introduisez quelques variables supplémentaires pour gérer la boîte de dialogue et son contenu :

 var dialogue_box: Label
var close_button: Button
var dialogue_lines: Array = ["Hello, adventurer!", "Welcome to our village."]

var current_line: int = 0
var line_timer: float = 0

La boîte de dialogue sera responsable de l’affichage du texte du dialogue, tandis que le bouton close_button permettra aux joueurs de fermer la boîte de dialogue en cas de besoin.

Dans la fonction _ready, créez et initialisez la boîte de dialogue :

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

Affichage du texte du dialogue

Vous pouvez maintenant vous concentrer sur l’affichage du texte dans la boîte 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 segment 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 plus de 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 boîte de dialogue avec la ligne de dialogue actuelle et incrémente l’index current_line. Le line_timer garantit que chaque ligne est affichée pendant une brève période avant de passer à la ligne suivante.

Ajout d’un bouton de fermeture

Désormais, vous pouvez donner aux joueurs la possibilité de fermer la boîte de dialogue et de continuer à jouer. Faites cela avec un bouton de fermeture qui, lorsqu’il appuie dessus, masque la boîte de dialogue et permet au joueur de reprendre son voyage.

Tout d’abord, modifiez la fonction _ready pour créer un bouton de fermeture et attachez sa fonctionnalité.

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

    close_button = Button.new()
    close_button.text = "Close"
    close_button.position = Vector2(50, 30)
    close_button.visible = false
    close_button.pressed.connect(_on_close_button_pressed)
    add_child(close_button)

Ce code crée une instance de la classe Button et personnalise son apparence et sa position. Il connecte également le signal enfoncé à la fonction _on_close_button_pressed.

Implémentez maintenant la fonction _on_close_button_pressed. Dans cette fonction, définissez la visibilité de la boîte de dialogue et du bouton de fermeture sur false. Cela masque efficacement l’interface de dialogue au joueur.

N’oubliez pas de réinitialiser l’index current_line à 0 pour vous assurer que le dialogue recommence depuis le début la prochaine fois que le joueur initie une conversation :

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

Grâce à ces changements, les joueurs pourront engager un dialogue et fermer la boîte de dialogue lorsqu’ils seront prêts à continuer à explorer ou à interagir avec le monde du jeu.

Meilleures pratiques pour votre système de dialogue

Alors que vous continuez à développer et à affiner votre système de dialogue, garder à l’esprit les bonnes pratiques suivantes vous aidera à garantir que votre système améliore au maximum la narration de votre jeu et l’engagement des joueurs.

La cohérence est la clé

Maintenez un ton, un style d’écriture et un vocabulaire cohérents tout au long de votre système de dialogue. La cohérence aide les joueurs à se connecter avec les personnages et le monde du jeu, créant ainsi une expérience fluide et immersive.

Créer des voix de personnages

Chaque personnage doit avoir une voix et une personnalité distinctes reflétées dans ses dialogues. Tenez compte de leurs antécédents, de leurs motivations et de leurs émotions lorsque vous rédigez leurs lignes.

Cette différenciation ajoute 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

Concevoir des choix de dialogue qui ont des conséquences significatives. Les choix qui ont un impact sur le récit du jeu, les relations ou même les mécanismes de jeu encouragent 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 dialogue pour détecter les fautes de frappe, les erreurs grammaticales ou les problèmes de rythme. Participez aux tests de jeu pour recueillir les commentaires des joueurs et apporter les ajustements nécessaires pour garantir que le système de dialogue se déroule sans problème et améliore l’expérience de jeu globale.

Cohérence de l’interface utilisateur

Assurez-vous que la conception et la présentation du système de dialogue correspondent à la conception globale de l’interface utilisateur (UI) de votre jeu. Des éléments d’interface utilisateur, des polices et des couleurs cohérents créent une expérience visuelle cohérente qui contribue à l’immersion du jeu.

En suivant ces bonnes pratiques, vous pouvez créer un système de dialogue qui non seulement améliore le récit de votre jeu, mais crée également une expérience mémorable et immersive pour les joueurs.

Élevez vos jeux Godot avec des systèmes de dialogue

L’intégration d’un système de dialogue dans vos jeux Godot peut améliorer l’engagement des joueurs et révolutionner votre narration. En permettant aux personnages de communiquer, d’exprimer leurs émotions et de réagir aux décisions des joueurs, vous créez un monde de jeu plus immersif et interactif.

Avec l’environnement convivial de Godot et la puissance de GDScript, vous disposez des outils nécessaires pour créer des systèmes de dialogue convaincants qui attirent les joueurs dans votre récit et améliorent leur expérience de jeu globale.