Dialogue Editor¶
Le Dialogue Editor est l'outil que vous utilisez pour créer et écrire un Dialogue.
Un Dialogue est un asset qui contient une arborescence structurée de texte. Il est avant tout destiné à héberger des conversations entre un ou plusieurs personnages, que l'on peut transformer en séquences jouables et interactives — mais c'est d'abord et surtout un conteneur de données, si bien qu'il peut également alimenter d'autres mécaniques telles que des documents écrits, des interfaces informatiques diégétiques, etc.
Créer un Dialogue¶
Faites un clic droit dans le Content Browser ▸ Dialogue. Par convention, préfixez toujours l'asset
avec D_.

Personnages¶
Pour que chaque ligne de contenu puisse être attribuée à un personnage qui parle (Speaker) et/ou écoute (Listener), on commence en général un dialogue en ajoutant les personnages qui y prennent part.
Utilisez les boutons jaunes de la barre d'outils pour ajouter un personnage et — après en avoir sélectionné un dans la liste — pour le retirer ou le remplacer.

Chaque personnage se voit attribuer une couleur utilisée sur ses lignes dans la vue principale. Faites glisser les personnages dans la liste pour permuter leurs couleurs.
Pour être utilisable dans un Dialogue, le Blueprint d'un personnage doit implémenter l'interface
LBRDialogueCharacter.
Tip
La plupart des projets disposent d'une classe de base unique dont dérivent tous les personnages. Si cette classe de base implémente l'interface, vous pouvez créer un Blueprint par personnage à partir d'elle (ou d'une autre classe adaptée à votre projet).
Tip
Une classe de base pour les personnages intangibles (une voix au téléphone, un narrateur…) —
voir ULBRIntangibleCharacter — n'a besoin que de définir des paramètres de voix et ne requiert
aucune instance dans le niveau.
Le nom d'affichage par défaut est le nom de la classe. Pour le remplacer, implémentez
LBRGetCharacterName. Un bon motif consiste à l'implémenter une seule fois dans la classe de base,
à partir d'une variable Name que vous renseignez pour chaque personnage. Préférez du texte
localisé, car ce nom peut être affiché en jeu (dans les sous-titres, par exemple). La classe de base
ALBRSimpleDialogueCharacter fournie renvoie sa propriété CharacterName de cette manière.
Subdialogues¶
Les subdialogues sont l'élément structurel essentiel d'un Dialogue. Ils vous permettent de découper un dialogue de manière logique, afin de :
- Tenir différentes conversations entre les mêmes personnages selon des contextes différents (par exemple un subdialogue lorsque le joueur parle à un personnage sans connaître une information clé, et un autre une fois qu'il la connaît).
- Séparer des configurations différentes qui nécessitent un traitement spécifique lors de la génération (par exemple un subdialogue pour un tête-à-tête, un autre lorsqu'un troisième personnage se joint à la conversation).
- Rendre les longs dialogues plus faciles à lire et à parcourir.
- Structurer du contenu utilisé dans un autre contexte (par exemple un subdialogue par page lorsque le dialogue décrit un document écrit).
Un Dialogue contient toujours au moins un subdialogue. Par défaut, un Dialogue joue son premier subdialogue ; vous pouvez en demander un précis par son nom. À l'entrée, les subdialogues candidats sont évalués dans l'ordre — le premier qui correspond au nom demandé et dont la condition est satisfaite est joué.
La fin d'un subdialogue est la fin du Dialogue : utilisez un GoTo explicite pour sauter vers un autre subdialogue (uniquement au sein du même Dialogue). L'ordre des subdialogues dans la liste a son importance (voir GoTo ▸ Next Subdialogue ci-dessous).
Double-cliquez sur le nom d'un subdialogue pour l'ouvrir ; chaque subdialogue ouvert possède son propre onglet dans la vue principale. Chaque subdialogue peut redéfinir son contexte de mise en scène (placement des personnages, gestion des caméras…), mais la liste des personnages est partagée par l'ensemble du Dialogue.
Paramètres d'un subdialogue¶
La sélection d'un subdialogue affiche ses propriétés dans le panneau de détails :
| Propriété | Rôle |
|---|---|
| Name | Unique au sein du Dialogue. Sert à la fois à naviguer dans l'éditeur et à générer le tag identifiant le subdialogue. |
| Selectors | Tags utilisés pour sélectionner spécifiquement ce subdialogue, ou pour le regrouper thématiquement avec d'autres. |
| Condition | Une condition dynamique qui autorise, ou non, le subdialogue à se jouer. |
| Stage Actor Class | La classe de stage instanciée à la génération. Définit le placement des personnages et les types de caméras générés. |
| Dialogue Priority | Le niveau de priorité utilisé lorsque deux subdialogues sont en concurrence. |
| Flags | Configuration extensible via LBRGameplayTagFlags. Même s'ils ne sont pas affichés ici, un subdialogue est considéré comme ayant tous les flags par défaut du projet cochés, sauf s'il définit Libretto.Flags.Subdialogue.NoDefault. |

Lignes¶
L'unité de base du contenu d'un Dialogue est la ligne. La plupart des lignes sont des répliques parlées, mais il en existe plusieurs types.
Chaque ligne possède un ID unique au sein du Dialogue (un entier positif). Vous pouvez également définir un Label optionnel, actuellement utilisé par les lignes GoTo.
Dans le cas d'usage visé (génération dynamique de séquences), seul le texte localisé des lignes
Text et Reply est affiché en jeu — sous forme de sous-titres ou de choix de dialogue. Ce texte
est coloré avec la couleur du Speaker ; le texte des autres types de ligne est blanc.

Types de ligne¶
| Type | Rôle | Paramètres clés |
|---|---|---|
| Text | Le contenu parlé, affiché en jeu sous forme de sous-titres. | Stage Direction (utilisée pour l'enregistrement audio — rédigez-la en anglais), Context, Speaker (avec postures et émotions ; s'il y en a un présent, une piste audio est générée), Listener (postures et émotions), Overlap Time (laisse les lignes se chevaucher pour que les personnages puissent s'interrompre). |
| Choice | Propose au joueur un ensemble de réponses (Replies) parmi lesquelles choisir. | Time — temps imparti pour faire le choix ; 0 signifie aucune limite de temps. Vous pouvez placer des lignes Text à l'intérieur d'un Choice, avant les Replies : elles se jouent pendant que le choix est affiché et peuvent être interrompues une fois un choix effectué. |
| Reply | Une réponse du joueur à un Choice. | Do Once (ne jouer qu'une fois), Default Reply (choisie lorsque le minuteur du Choice expire), Display Condition (si false, la Reply n'est ni proposée ni affichée), Availability Condition (si false, la Reply est affichée mais grisée et non sélectionnable). |
| GoTo | Saute directement vers la ligne indiquée par son ID ou son Label. | Undefined (-1) met fin au dialogue. Next Subdialogue (-2) saute vers la première ligne du subdialogue suivant (ou met fin au dialogue s'il n'y en a pas). |
| If / ElseIf / Else | Fait bifurquer le dialogue sans intervention du joueur. | Success Condition — si true, le joueur entre dans la branche ; sinon, le ElseIf/Else suivant est évalué. ElseIf/Else sont optionnels et vous pouvez enchaîner autant de ElseIf que nécessaire. |
| Silence | Une simple pause. | Time — la durée de la pause. |
| Cinematic | Crée un fichier de séquence sans réplique parlée (cinématiques sans texte). | Le texte fait office de commentaire. |
| Comment | Visible uniquement dans l'éditeur, sans effet en dehors. | Texte libre — pratique pour garder une idée, expliquer un concept ou clarifier la lecture. |
Ordre de lecture après un bloc
Une fois qu'un Reply ou un bloc If/ElseIf/Else est terminé, la ligne suivante jouée est celle
située immédiatement après le Choice / le bloc If, au même niveau d'indentation.
GoTo invalide
Un GoTo dont la valeur ne correspond à aucune ligne s'affiche en rouge, avec l'erreur dans son infobulle. Lorsqu'un GoTo valide est sélectionné, sa destination est mise en surbrillance et vous pouvez y sauter avec Go to line dans le panneau de détails.
Flux d'écriture & raccourcis¶
L'essentiel d'un dialogue s'écrit au clavier, sans toucher au panneau de détails. Sélectionnez une ligne, saisissez son texte, puis ajoutez la ligne suivante à l'aide de l'un des deux raccourcis :
| Raccourci | Ajoute |
|---|---|
Ctrl+Enter |
Une nouvelle ligne Text avec le même Speaker et le même Listener que la ligne sélectionnée — le même personnage continue de parler. |
Shift+Enter |
Une nouvelle ligne Text avec le Speaker et le Listener inversés — l'autre personnage répond. |
Ces deux raccourcis couvrent l'essentiel d'une conversation en va-et-vient : Ctrl+Enter pour
laisser un personnage continuer à parler, Shift+Enter pour confier la ligne suivante à l'autre
personnage — inutile de définir le Speaker et le Listener à la main à chaque fois.
Inverser sur des lignes déjà écrites
Pour inverser qui parle et qui écoute sur des lignes existantes, sélectionnez-les et exécutez Swap Speaker/Listener (clic droit ▸ Swap Speaker/Listener).
Les autres types de ligne s'ajoutent depuis les boutons de la barre d'outils ou le menu du clic droit — Add Silence, GoTo, Choice, Reply, If, Else If, Else, Comment, Cinematic.
Raccourcis pratiques¶
| Action | Raccourci par défaut |
|---|---|
| Add Text — même speaker | Ctrl+Enter |
| Add Text — inverser speaker/listener | Shift+Enter |
| Déplacer la ligne vers le haut / le bas | Alt+↑ / Alt+↓ (ou glisser-déposer) |
| Rechercher du texte dans le dialogue | Ctrl+F |
| Rafraîchir les onglets | F5 |
| Jouer la voix / le TTS de la ligne | Space |
| Jouer les lignes suivantes à la suite | Ctrl+Space |
| Passer l'audio à la ligne suivante / précédente | Ctrl+→ / Ctrl+← |
| Parcourir l'asset audio de la ligne | Ctrl+Shift+Enter |
| Ouvrir l'audio de la ligne dans le Sequencer | Ctrl+Shift+Space |
L'aperçu audio n'est pas le mixage final
Space joue la voix enregistrée de la ligne (ou son TTS s'il n'y a pas d'enregistrement), et
Ctrl+Space joue à la suite les lignes suivantes. Cet aperçu ne reflète pas le montage
audio réalisé dans le Sequencer — ouvrez la séquence ou jouez-la dans le niveau pour obtenir le
résultat réel.
Tout est remappable
Ce ne sont là que les liaisons par défaut. Modifiez n'importe laquelle dans Editor Preferences — recherchez « Dialogue Editor » pour trouver la liste des commandes Libretto.
Conditions¶
Plusieurs fonctionnalités d'étiquetage ajoutent des couches à l'interface du Dialogue Editor. Une condition permet à un subdialogue, à une Reply ou à une branche If de dépendre d'un état dynamique (par exemple vérifier qu'une valeur est en dessous d'un seuil).

Consultez la page Conditions pour la création de Blueprints de condition.
Vérifier qu'un dialogue a été joué
Pour tester « ce dialogue/subdialogue a-t-il été joué », utilisez la condition dédiée
ULBRDialogueDoneCondition plutôt qu'une condition écrite à la main via un chemin de GPVar.
Voir GPVars & Conditions.
Actions¶
Sur tous les types de ligne sauf Cinematic et Comment, vous pouvez ajouter des actions via le
panneau de détails. Les actions sont des Blueprints exécutés au moment où la ligne se joue — un hook
très flexible pour faire n'importe quoi pendant un dialogue : donner un objet à un PNJ, déclencher un
événement de gameplay, afficher une interface, etc.
La classe de base d'une action est ULBRAction. Redéfinissez notamment DoAction (exécutée
lorsque la ligne se joue en jeu) et GetLabel (ajoute une couche dans l'interface du Dialogue
Editor).

Tags & Flags¶
- Add Tag / Remove Tag lèvent ou baissent directement des GPFlags (à la racine).
- Flags attachent des métadonnées à une ligne, interprétées à la génération ou au moment de la
lecture. Des flags par défaut existent pour modifier le style des sous-titres, mais vous pouvez
créer vos propres GameplayTags afin d'ajouter des options propres à votre projet. Les flags par
défaut définis sur le projet, le dialogue ou le subdialogue s'appliquent à toute ligne qui ne porte
pas le flag
NoDefault.
Identification dynamique par tag¶
Des GameplayTags uniques sont créés automatiquement pour identifier chaque Dialogue, Subdialogue, Choice et Reply :
Libretto.Dialogues.DialogueName[.SubdialogueName]
Libretto.Dialogues.DialogueName.Choice_ID[.Reply_ID]
Par défaut, ils sont générés au chargement du projet, par le LBRDynamicTagsSubsystem. Vous
pouvez le désactiver via sa valeur bUseSubsystem dans le .ini ; une fois désactivé, les tags sont
figés dans Config/DynamicTags/DynamicTags.ini (et l'association tag→index de dialogue dans
Config/LBRDynamicTags.ini). Voir Dynamic tags pour les détails.
Ces tags servent à stocker des métadonnées (combien de fois un dialogue/subdialogue a été joué, combien de fois un choix a été sélectionné) dans le sous-système de GPVar.
Sequences¶
L'éditeur détecte automatiquement les subdivisions dont un dialogue a besoin pour s'exécuter correctement. Les lignes sont regroupées en sequences, utilisées lors de la génération et de la lecture dans le Sequencer — chaque sequence correspond à un asset Sequencer généré. La sélection d'une ligne éclaircit légèrement les autres lignes de la même sequence.
Une ligne commence une nouvelle sequence lorsqu'elle est :
- la première ligne d'un subdialogue,
- un
Cinematic,Reply,ElseIfouElse, - située juste après un
Choiceou unIf/ElseIf/Else, - la destination d'au moins un GoTo.
Une ligne termine une sequence lorsqu'elle est :
- la dernière ligne d'un subdialogue,
- un
Cinematic,GoToouChoice.
Vue principale¶

Le menu View active ou désactive les colonnes de la vue principale. Quelques-unes à retenir :
- Index — rarement utile pendant l'écriture, mais pratique pour le débogage : l'index auquel la ligne est stockée dans les tableaux de données de l'asset Dialogue. Mis à jour lorsque le Dialogue est sauvegardé.
- Sequence — la sequence à laquelle appartient la ligne.
- Tags — une aide visuelle pour repérer rapidement les lignes porteuses de métadonnées telles que des conditions ou des actions.
Panneau de recherche¶
Ctrl+F ouvre le panneau de recherche. Il recherche une sous-chaîne dans tout le dialogue (sans tenir
compte de la casse) ; les petites flèches font défiler les correspondances. Si vous recherchez un
nombre, appuyer sur Entrée (ou sur Go to ID) sélectionne directement l'ID correspondant, tandis
que les flèches recherchent ce nombre à l'intérieur du texte.

Panneau d'aperçu du texte¶
Le panneau Text Preview rend les balises de texte enrichi. Vous pouvez modifier la configuration du texte enrichi dans Project Settings ▸ Libretto – Dialogue Editor.
Menu contextuel¶
Faites un clic droit dans la vue principale pour ouvrir le menu contextuel, réparti en sections :
- Spell Checker — voir Correction orthographique.
- Open — ouvre la séquence Master ou Level dans le Sequencer à la bonne frame (vous devez d'abord générer le dialogue).
- New / Delete — ajoute de nouvelles lignes (également dans la barre d'outils du haut) et supprime.
- Move — déplace une ou plusieurs lignes vers le haut/le bas (également via glisser-déposer).
- Expand / Collapse — déplie/replie toutes les lignes d'un coup.
Shift+clic gauche sur la flèche d'une ligne déplie/replie ses enfants. - Copy — Copier/Couper/Coller. Paste special ouvre une petite fenêtre où vous choisissez ce qui accompagne les lignes copiées : leurs traductions dans toutes les langues, la voix enregistrée, le text-to-speech et le lip-sync. Les lignes collées reçoivent de nouveaux IDs, et cela fonctionne d'un dialogue à l'autre (copier dans l'un, paste special dans l'autre).
- ID — copie l'ID de la ligne sélectionnée (collez-le directement dans un GoTo).

Correction orthographique¶
L'éditeur utilise le correcteur orthographique intégré à Windows (celui de Word et d'Edge). Vous lui fournissez des mots ; il renvoie ceux qu'il ne connaît pas, accompagnés de suggestions orthographiques proches.
Le correcteur peut fonctionner au fil de l'édition d'une ligne, ou à la demande. Sur une « faute », la ligne
devient rouge et le menu contextuel liste les erreurs avec des suggestions de remplacement. Si un mot
n'est pas réellement une faute (un nom propre, un acronyme…), vous pouvez l'ajouter à un dictionnaire
propre au projet, dans Resources/Libretto/personalDictionary.dic.
Exécutez-le sur l'ensemble du dialogue depuis Dialogue Tools ▸ Launch CheckSpeller.
Rien à installer, et aucun dictionnaire n'est livré avec le plugin : le correcteur utilise les langues
installées dans Windows. Une culture à deux lettres prend la région principale de la langue
(en → en-US, fr → fr-FR). Pour prendre en charge une autre langue, ajoutez-la dans
Paramètres Windows ▸ Heure et langue ▸ Langue et région, puis redémarrez l'éditeur.

Règles de formatage automatiques¶
Lorsqu'une ligne est éditée, des règles fondées sur des expressions régulières peuvent corriger des erreurs très précises — par exemple imposer les espacements propres à une langue autour de la ponctuation, que l'inattention casse souvent. Configurez-les dans les Project Settings.

Pour ajouter des règles à une langue, ajoutez une entrée à Rule by Culture avec cette langue et un jeu de règles :
- Un jeu de règles est un Data Asset dérivant de
ULBRFormatRules(avec le « s »), qui contient ses règles dans son tableauRules. - Une règle est un Data Asset dérivant de
ULBRFormatRule, définie par trois paramètres :- Pattern — une expression régulière correspondant au texte à corriger.
- Index to Fix in Pattern — le décalage, depuis le début du texte correspondant, à corriger.
- Fix Function Name — la fonction de correction. Actuellement
UpperCase,RemoveSpace,InsertSpace(définies en C++ dansULBRFormatRule).
Example
Règle UpperCaseAtBeginning sur la phrase « les jeux, c'est amusant. » — le pattern correspond au
premier mot en minuscules « les », l'index pointe sur le premier caractère « l », et UpperCase
le transforme en « L » → « Les jeux, c'est amusant. »
Une option Enable automatic capital par ligne permet de désactiver la règle de mise en majuscule en début de ligne.
Localisation & import/export¶
La traduction des dialogues, l'import et l'export de dialogues via CSV, ainsi que le suivi du statut de localisation/audio de chaque ligne sont traités sur leur propre page — voir Localization & import/export.
Paramètres¶
Dans Project Settings ▸ Libretto :
- Dialogues Directory doit lister tous les Dialogues présents dans le jeu final (un répertoire racine ; les dialogues peuvent se trouver dans des sous-dossiers).
- Base Culture doit être renseignée (par défaut
en). - Extenders étendent les propriétés attachées aux lignes, aux subdialogues ou aux dialogues, en ajoutant des métadonnées éditables dans les panneaux de détails. Faites-les pointer vers une classe Blueprint contenant les variables à ajouter. ⚠️ Pour appliquer une modification d'Extender, fermez et rouvrez tous les Dialogues ouverts.
- Vous pouvez ajouter des flags par défaut pour tous les subdialogues ou toutes les lignes, ainsi que des flags propres au projet au niveau ligne, subdialogue ou dialogue, en créant les GameplayTags correspondants dans la bonne hiérarchie.
Dans Editor Preferences ▸ Libretto – Dialogue Editor, vous pouvez modifier le comportement automatique du correcteur orthographique et de l'édition automatique, et personnaliser les couleurs. Rechercher « Dialogue Editor » dans les Editor Preferences permet aussi de personnaliser le raccourci de chaque commande.
Actions depuis le Content Browser¶
Faites un clic droit sur un ou plusieurs Dialogues pour accéder à plusieurs outils d'écriture par lot :
- Find text — recherche du texte dans les dialogues sélectionnés et ouvre celui de la
correspondance (un
Ctrl+Fen masse). - Count — statistiques de comptage de mots, copiées dans le presse-papiers au format CSV.
Les actions d'import / export ont été déplacées
Les actions d'import/export CSV (import de dialogue, export de localisation, Choices And Replies, Fix localization) se trouvent sur la page Localization & import/export.