Écrire des dialogues¶
Le joueur doit choisir ses réponses — comment créer un embranchement ?¶
Ajoutez une ligne Choice, puis placez des lignes Reply en dessous. Chaque Reply est une
option que le joueur peut choisir ; ce que vous écrivez sous un Reply est l'embranchement joué
lorsqu'il est retenu. Quand l'embranchement se termine, la lecture reprend à la ligne
immédiatement après le Choice.

- Ajoutez une ligne Choice là où le joueur doit décider. Réglez son Time (secondes accordées
pour choisir ;
0= pas de limite de temps). - Ajoutez une ligne Reply en dessous pour chaque option, et écrivez son embranchement (lignes
Text, GoTo, autres Choices…) indenté sous elle. Le texte du Reply sert à afficher l'option au
joueur ; il n'est pas voisé. Pour donner une voix à un choix du joueur, placez une ligne
Textprononcée par le personnage joueur à l'intérieur du Choice ou après lui. - Pour envoyer un embranchement ailleurs qu'à la ligne suivant le Choice, terminez-le par un GoTo (vers un ID/Label de ligne, ou Next Subdialogue).
- Affinez chaque Reply dans le panneau de détails : Do Once (une fois choisi, il ne peut plus l'être à nouveau), Default Reply (choisi si le minuteur expire), Display Condition (le masque entièrement quand elle est fausse), Availability Condition (l'affiche grisé et non sélectionnable quand elle est fausse).
Piège
Après la fin d'un bloc Reply, la ligne jouée ensuite est celle immédiatement après le Choice, au
même niveau d'indentation — prévoyez une ligne où les embranchements peuvent reconverger, ou
utilisez GoTo pour rediriger ailleurs.
Voir aussi : Dialogue Editor — types de lignes · Choice widgets · Conditions
Comment découper une longue conversation, ou la changer selon le contexte ?¶
Découpez-la en sous-dialogues. Un sous-dialogue est un embranchement autonome du même Dialogue que vous pouvez demander par nom et conditionner par une condition — la façon naturelle de tenir des conversations différentes entre les mêmes personnages (avant/après une révélation, en tête-à-tête ou avec l'arrivée d'un troisième personnage) ou simplement de garder un long script lisible.

- Ajoutez un sous-dialogue et donnez-lui un Name unique.
- Réglez éventuellement ses Selectors (tags pour le choisir ou le regrouper) et sa Condition (s'il peut jouer ou non).
- Demandez un sous-dialogue précis par son nom à l'exécution ; à l'entrée, les candidats sont évalués dans l'ordre de la liste et le premier dont le nom correspond et dont la condition passe est joué.
- Pour enchaîner les sous-dialogues, terminez l'un par un GoTo ▸ Next Subdialogue (ou un GoTo vers une ligne précise).
Piège
La fin d'un sous-dialogue est la fin du Dialogue entier, à moins que vous n'en sortiez par un
GoTo explicite — et l'ordre des sous-dialogues dans la liste compte, car Next Subdialogue
s'en sert. La liste des personnages est partagée par tout le Dialogue, mais chaque sous-dialogue
peut redéfinir sa propre mise en scène (voir Stages).
Voir aussi : Dialogue Editor — sous-dialogues · Conditions · Priorities
Comment faire apparaître une ligne seulement dans certaines situations ?¶
Attachez-lui une condition. Les conditions sont de petits Blueprints qui lisent l'état dynamique du jeu et renvoient vrai/faux ; vous pouvez en placer une sur un Reply, sur un embranchement If/ElseIf/Else, ou sur un sous-dialogue entier.

- Pour une option joueur, utilisez la Display Condition du Reply (masquée quand elle est fausse) ou l'Availability Condition (affichée mais grisée quand elle est fausse).
- Pour brancher sans intervention du joueur, utilisez un bloc If / ElseIf / Else et réglez la Success Condition de l'embranchement — le premier embranchement dont la condition est vraie est emprunté.
- Pour activer/désactiver un sous-dialogue entier, réglez sa Condition.
Piège
Pour tester « ce dialogue ou ce sous-dialogue a-t-il déjà été joué », utilisez la condition
dédiée ULBRDialogueDoneCondition plutôt que d'écrire à la main une vérification de chemin
GPVar — Libretto enregistre déjà les compteurs de lecture sur le
tag dynamique de chaque dialogue.
Voir aussi : Conditions · GPVars · Dialogue Editor — conditions
Comment exécuter de la logique de jeu quand une ligne se joue ?¶
Attachez une action à la ligne. Une action est un Blueprint (ULBRAction) dont la méthode
DoAction s'exécute lorsque cette ligne se joue en jeu — un point d'accroche polyvalent pour
donner un objet, déclencher un événement de gameplay, afficher une UI, etc.

- Sélectionnez la ligne et ajoutez une Action dans son panneau de détails.
- Choisissez ou créez une sous-classe de
ULBRAction. - Implémentez
DoAction(ce qui se passe à la lecture) et, éventuellement,GetLabel(un libellé lisible affiché sur la ligne dans l'éditeur).
Piège
Les actions sont disponibles sur tous les types de lignes sauf Cinematic et Comment. Elles
s'exécutent à la lecture, pas à la génération — ne comptez pas dessus pour changer ce qui est
généré.
Voir aussi : Dialogue Editor — actions · Runtime
Comment donner des lignes à une voix sans corps — un appel téléphonique, un narrateur ?¶
Utilisez un personnage intangible. Dérivez-le de ULBRIntangibleCharacter et ajoutez-le au
dialogue comme n'importe quel autre personnage. Il n'a ni mesh ni acteur dans le niveau, donc il n'y
a rien à placer ni à faire apparaître — il ne fait que parler.

- Créez un Blueprint à partir de
ULBRIntangibleCharacter(aucun C++ requis). - Réglez son
CharacterName(localisé). - Ajoutez-le dans la liste des personnages de l'éditeur de dialogue et écrivez ses lignes
Text.
Piège
Comme il n'a pas de corps, les pistes d'animation, de lip-sync et de caméra sont ignorées pour
lui — seuls son audio et ses sous-titres sont produits. (La propriété CharacterGender ne sert
qu'au repli du choix de voix TTS et peut généralement être ignorée.)
Voir aussi : Personnages intangibles · Voices
Comment utiliser un dialogue pour un document ou du texte à l'écran plutôt qu'une scène jouée ?¶
Cochez Staging.Interface2D sur ses sous-dialogues et lisez-le depuis votre UI avec les helpers de
lecture — le sujet a désormais sa propre page. Un document, un fil de téléphone, une popup, une
messagerie vocale ou un écran de verrouillage y sont tous traités, avec un exemple fonctionnel sur la
map tutoriel : voir
Je veux afficher un dialogue dans une UI au lieu de le jouer
et, pour des pages, Je veux un document ou une lettre de plusieurs pages.
Voir aussi : Lire des dialogues dans des interfaces 2D
Comment contrôler exactement ce que le sous-titre affiche ?¶
Les sous-titres sont automatiques — chaque ligne jouée devient du texte à l'écran (Locuteur : ligne)
sans aucune configuration. Pour changer ce qui s'affiche, vous ajustez le widget livré, en
substituez un vôtre, utilisez des flags par ligne, ou routez les sous-titres vers votre HUD existant.

- Faites le vôtre à partir du widget livré. Plutôt que de modifier
ULBRSimpleSubtitleWidgetdans le plugin (ce qui entrerait en conflit avec les futures mises à jour), dupliquez/sous-classez-le dans votre projet et ajustez votre copie — basculezbShowSpeakerName, réglezFontSize, surchargez l'apparence — puis faites pointer le réglage ci-dessous dessus. - Substituez le widget dans Project Settings ▸ Libretto ▸ UI ▸ Widget Subtitle Class —
n'importe quelle classe qui implémente l'interface
LBRDialogueSubtitle. - Surchargez par ligne avec des flags : NoSubtitle (la ligne se joue sans sous-titre) et Subtitle3D (rendu dans l'espace du monde au-dessus de la tête du locuteur, à la manière d'un bark).
- Utilisez votre propre HUD en liant les délégués du gestionnaire
OnSubtitleDisplayed/OnSubtitleHiddensurULBRDialogueManagerau lieu de laisser Libretto faire apparaître un widget.
Piège
Lier OnSubtitleDisplayed a la priorité sur le widget intégré — une fois lié, le
gestionnaire cesse de faire apparaître WidgetSubtitleClass, donc routez les sous-titres
vous-même. Subtitle3D a besoin que l'acteur du locuteur soit présent dans le monde ; s'il ne
peut pas être résolu (p. ex. un bark d'un personnage absent), rien n'est affiché et aucune erreur
n'est levée.
Voir aussi : Sous-titres · Choice widgets
L'éditeur signale mes mots comme mal orthographiés — comment corriger, ou lui apprendre de nouveaux mots ?¶
Le Dialogue Editor utilise le correcteur orthographique de Windows ; une ligne fautive passe en rouge et propose des suggestions. Pour les mots légitimes qu'il ne connaît pas — noms propres, acronymes, termes inventés — vous les ajoutez une fois à un dictionnaire de projet et il cesse de les signaler partout.

- Lisez le signalement. Quand une ligne contient un mot inconnu, elle passe en rouge ; le correcteur propose les orthographes les plus proches de ses dictionnaires pour corriger le texte sur place.
- Apprenez-lui un mot. Pour un mot correct mais inconnu (un nom de personnage, un acronyme…),
ajoutez-le au dictionnaire de projet dans
Resources/Libretto/personalDictionary.dic— une entrée par ligne. Il est alors accepté dans tous les dialogues du projet. - Vérifiez tout un dialogue d'un coup via Dialogue Tools ▸ Launch CheckSpeller, plutôt que d'attendre de visiter chaque ligne.
- Réglez son déclenchement dans Editor Preferences ▸ Dialogue Editor :
bLaunchCheckSpellerAtModification(vérifie une ligne à la frappe, activé par défaut) etbLaunchCheckSpellerAtStart(balaye tout le dialogue à l'ouverture, désactivé par défaut).
Piège
Le correcteur valide contre la langue Windows correspondant à la culture d'édition (en →
en-US, fr → fr-FR) ; aucun dictionnaire n'est livré avec le plugin. Pour une culture absente
de Windows, rien n'est signalé, et l'Output Log l'indique une fois (No Windows spell checker for
language…). 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. Appuyez-vous sur
personalDictionary.dic pour tout ce qui est spécifique au projet plutôt que de tenter de faire
taire des lignes individuelles.
Voir aussi : Dialogue Editor — Spell checking · Settings — Spell checker