Skip to content

Intangible characters

An intangible character is a character with no body in the level — a voice on the phone, a narrator, an intercom, a disembodied entity. It takes part in a Dialogue and can be given lines, but because it never appears on screen it needs nothing beyond a name and a voice: no mesh, no level instance, no staging slot.

Libretto ships a ready-made base class for exactly this case, so you rarely have to implement the LBRDialogueCharacter interface by hand.

Create one

Derive your character class from ULBRIntangibleCharacter. It is a BlueprintType, Blueprintable UObject, so you can create a Blueprint from it directly in the Content Browser — no C++ needed.

Creating a Blueprint from ULBRIntangibleCharacter

Because it derives from UObject (not AActor), an intangible character has no presence in the world. When a Dialogue needs it, Libretto simply uses the class default object as the instance — there is nothing to place or spawn.

Configure it

Everything you need lives in the class defaults. Two properties matter:

Property Type Purpose
CharacterName FText The display name shown in the editor and, when relevant, in-game (subtitles). Use localized text — it may be shown to players.
CharacterGender ELBRCharacterGender (Male / Female) Feeds TTS voice selection when generating audio for this character.

Class defaults: name and gender

That is the whole setup. The base class already wires these into the interface: it returns CharacterName from LBRGetCharacterName and CharacterGender from LBRGetCharacterGender.

Tip

The gender only drives which TTS voice is picked at generation. If you never generate synthetic audio for this character, you can leave it at its default.

Also available — staging roles

ULBRIntangibleCharacter also exposes a StageRoles property (a GameplayTagContainer, surfaced through GetStageRoles). It is optional and empty by default; you only need it if you match characters to stage slots by role. For a pure voice/narrator, leave it empty.

How it differs from a regular character

A body-bearing character usually derives from a base such as ALBRSimpleDialogueCharacter and provides mesh components (LBRGetBodyComponent, LBRGetHeadComponent) used to bind animation, lip-sync and camera tracks at generation. An intangible character deliberately supplies none of these, so those tracks are skipped for it — only its spoken audio and subtitles are produced.

Its voice always plays in 2D

Because it has no binding in the level, an intangible character's lines are placed on a root (unbound) audio track and played in 2D (non-spatialized) — by default, regardless of the subdialogue's staging flags. You never need to set Libretto.Flags.Subdialogue.Staging.Audio2D for an intangible speaker: that flag exists to force 2D audio for a body-bearing character (a voicemail read by an on-screen actor, say), whereas an intangible one already behaves that way.