Aller au contenu

Perspective & contrôle

Je veux que le joueur garde un peu de contrôle pendant qu'un PNJ lui parle

Placer les PNJ et libérer le joueur sont deux choix indépendants — vous pouvez les combiner. Que les personnages se tiennent sur des marques fixes dépend de si le sous-dialogue a un stage ; que le joueur puisse encore se déplacer et regarder dépend de si la caméra de gameplay continue de tourner et des deux flags de verrouillage du stage. Donc « PNJ positionnés » ne force pas « joueur figé » — vous réglez chaque côté séparément.

  1. Aucun positionnement, liberté totale — laissez la Stage Actor Class vide. Le sous-dialogue s'exécute en 3C pur : rien n'est placé, rien n'est verrouillé, le joueur garde la caméra de gameplay et se déplace librement. Vous pouvez le rendre explicite avec le flag Libretto.Flags.Subdialogue.Staging.3C (TAG_LBRSubDialogueFlag_3C). Les Flags d'un sous-dialogue montrant le flag Staging.3C

  2. PNJ positionnés, le joueur garde la vue — donnez un stage au sous-dialogue mais réglez son bUseStageCameras = false (le mode « 3C-staged ») : les PNJ se calent sur leurs marques tandis que la caméra propre au jeu continue de tourner, si bien que le joueur n'est jamais arraché vers une vue cinématique. Les flags bLockPlayerMovement / bLockPlayerCamera d'un stage

  3. Réglez le déplacement et le regard séparément — sur le stage, bLockPlayerMovement et bLockPlayerCamera sont deux booléens indépendants (tous deux à true par défaut). Désactivez celui que vous voulez : laissez le joueur regarder autour de lui sans pouvoir s'éloigner, figez la caméra mais autorisez un pas en arrière, ou effacez les deux pour une liberté totale alors que les PNJ restent mis en scène.

  4. Generate Sequences. La scène se joue avec le mélange de placement et de liberté que vous avez défini.

Piège

Les flags de verrouillage vivent sur le stage, donc un sous-dialogue 3C sans stage n'a rien à verrouiller — le joueur y est toujours libre. Mais le piège inverse : un stage verrouille le joueur par défaut (les deux flags à true), donc simplement ajouter un stage pour positionner vos PNJ va figer le joueur tant que vous n'aurez pas désactivé les flags. Placement et verrouillage sont des réglages distincts, mais les valeurs par défaut les lient — inversez-les délibérément.

Voir aussi : Mise en scène — ajouter un stage · Runtime — modes de mise en scène

Je veux une cinématique qui prend le contrôle de la vue et du joueur

Choisissez le mode de mise en scène sur le sous-dialogue — les trois modes décident qui pilote la caméra et si le joueur est verrouillé. Chaque sous-dialogue se joue dans l'un des trois modes, et en choisir un est la façon de glisser de « entièrement entre les mains du joueur » à « cinématique entièrement scénarisée ».

  1. Staged (prise de contrôle cinématique) — donnez une Stage Actor Class au sous-dialogue. Les caméras du stage pilotent la vue et, par défaut, le déplacement et la caméra du joueur sont verrouillés (bLockPlayerMovement / bLockPlayerCamera sur le stage). C'est le mode pour une scène dirigée et filmée.
  2. 3C-staged (placé, mais le joueur garde la vue) — utilisez un stage mais réglez son bUseStageCameras = false : les personnages se calent sur leurs marques, tout en laissant la caméra de gameplay tourner. Voir l'entrée précédente pour les réglages de liberté de déplacement/regard. Le flag de mise en scène CinematicDialogue sur un sous-dialogue

  3. Cinematic (scénarisé à la main) — cochez le flag Libretto.Flags.Subdialogue.Staging.CinematicDialogue (TAG_LBRSubDialogueFlag_CinematicDialogue) du sous-dialogue. Libretto ne génère aucune caméra ni aucune animation de personnage — seulement la coquille de timeline — laissant le plan à construire à la main dans Sequencer.

Piège

Staged et Cinematic sont deux choses différentes : staged génère quand même les caméras et l'animation pour vous ; cinematic ne génère délibérément ni l'un ni l'autre et est destiné à être retravaillé par un cinematic designer. Ne recourez pas au flag Cinematic juste pour obtenir un rendu filmé — un stage normal est ce qui filme la scène automatiquement.

Voir aussi : Mise en scène — ajouter un stage · Runtime — modes de mise en scène · Core concepts

Comment rendre mon propre personnage (ou le joueur) capable de parler dans les dialogues ?

Implémentez l'interface LBRDialogueCharacter sur votre Actor — vous n'avez besoin de dériver de rien. Libretto communique avec les participants via l'interface ILBRDialogueCharacter, qui est Blueprintable : n'importe quel pawn, character ou objet qui l'implémente peut être distribué dans un dialogue. Les ALBRSimpleDialogueCharacter et ULBRIntangibleCharacter du plugin ne sont que des implémentations prêtes à l'emploi — utilisez-les telles quelles, ou ajoutez l'interface à votre propre classe plutôt que d'en hériter.

LBRDialogueCharacter listé parmi les interfaces d'un Blueprint

  1. Sur votre Blueprint (ou classe C++), ajoutez l'interface LBRDialogueCharacter (Class Settings ▸ Implemented Interfaces).
  2. Implémentez les fonctions d'identité : LBRGetCharacterName (nom d'affichage localisé) et LBRGetCharacterGender (alimente le repli de voix TTS).
  3. Pour un personnage doté d'un corps, renvoyez les meshes à animer : LBRGetBodyComponent (animation du corps / gestes) et LBRGetHeadComponent (visage / lip-sync). Un personnage uniquement vocal peut les laisser de côté — c'est exactement ce que fait ULBRIntangibleCharacter.
  4. Implémentez RequestStartDialogue : préparez le personnage (déplacez-le en position si vous le gérez vous-même) puis appelez ULBRDialogueManager::OnDialogueCharacterReadyForDialogue — le dialogue attend cet appel avant de démarrer. Implémentez RequestEndDialogue pour faire le nettoyage.
  5. Pour que le personnage puisse se tenir sur les marques d'un stage, renvoyez ses rôles depuis GetStageRoles (Libretto.Stage.Roles.*) — le même système de rôles auquel se réfèrent les slots, les caméras et les lumières.

Piège

Un dialogue restera bloqué au démarrage si le RequestStartDialogue d'un participant n'appelle jamais OnDialogueCharacterReadyForDialogue — ce callback est le signal « je suis prêt », il doit donc se déclencher sur tous les chemins (y compris le cas où il n'y a rien à déplacer). Si vous n'avez besoin que d'une voix sans corps (un narrateur, une voix sur les comms), ne réimplémentez pas l'interface — utilisez ULBRIntangibleCharacter.

Voir aussi : Personnages intangibles · Mise en scène — qui se tient où · Blueprint API