GS_Cinematics
Node-graph dialogue sequences, cinematic stage management, polymorphic performances, and world-space UI with typewriter and audio babble.
GS_Cinematics is the complete dialogue and cinematic control system for GS_Play. It provides a node-graph authoring tool for branching dialogue sequences, a runtime sequencer with conditions and side effects, a UI layer for text display and player choice, and a Cinematics Manager for scene staging. Custom conditions, effects, and performance types are discovered automatically through O3DE serialization, so project-specific dialogue behaviors can be added without modifying the gem.
For architecture details, component properties, and extending the system in C++, see the GS_Cinematics API.
Quick Navigation
| I want to… | Feature | API |
|---|
| Coordinate cinematic sequences and manage stage markers for actor positioning | Cinematics Manager | API |
| Author branching dialogue with conditions, effects, and performances in a node graph | Dialogue System | API |
| Display dialogue text, player choices, and speech babble on screen or in world space | Dialogue UI | API |
| Move actors to stage markers during dialogue with navigation or teleport | Performances | API |
Installation
GS_Cinematics requires GS_Core, LyShine, and RecastNavigation. The node editor tools additionally require GraphCanvas and GraphModel as editor-only dependencies.
For a full guided walkthrough, follow the Simple Project Setup guide.
Quick Installation Summary
- Enable the GS_Cinematics gem in your project configuration.
- Create Cinematics Manager and Dialogue Manager prefabs, add to the Game Manager’s Managers list.
- Create
.dialoguedb assets with the Dialogue Editor. - Place DialogueSequencer and DialogueUI components in your level.
- Bake NavMesh in levels where PathTo performances will be used.
Cinematics Manager
The Cinematics Manager coordinates the begin and end of cinematic sequences, broadcasting enter/exit events so other systems know when to yield control. It maintains a registry of stage marker entities placed in each level — named anchor points that performers and cameras look up at runtime to determine positioning during a sequence.
Cinematics Manager
API
Dialogue System
The Dialogue System is the authoring and runtime core. Dialogue content is stored in .dialoguedb assets containing actors, portraits, and sequences. Each sequence is a graph of polymorphic nodes — text, selection, random branch, effects, and performances. A visual node editor lets writers author graphs directly in the O3DE Editor. At runtime, the sequencer walks the graph, evaluates conditions, executes effects, and emits events for the UI layer.
Dialogue System
API
Dialogue UI
The Dialogue UI feature set puts dialogue text and player choices on screen. DialogueUI handles screen-space text display with a Typewriter for character-by-character reveal. DialogueUISelection renders player choices as selectable buttons. World-space variants place speech bubbles above actors. Babble plays audio tied to the active speaker. The DialogueUIBridge routes sequencer events to the correct UI implementation and routes player selection back.
Dialogue UI
API
Performances are polymorphic actions that move or reposition actors during dialogue. MoveTo translates actors to named stage markers, PathTo navigates via NavMesh, and Reposition teleports instantly. All run asynchronously — the sequencer waits for completion before advancing. Custom performance types can be created through extending the class.
Performances
API
See Also
For the full API, component properties, and C++ extension guide:
For step-by-step project setup:
Get GS_Cinematics
GS_Cinematics — Explore this gem on the product page and add it to your project.
1 - Cinematics Manager
How to coordinate cinematic sequences in GS_Play — beginning and ending cutscenes, registering stage markers, and reacting to cinematic events from scripts.
The Cinematics Manager is the GS_Core-integrated manager component for the GS_Cinematics system. It signals when a cinematic sequence begins and ends, broadcasts events so other systems — UI, movement, input — know when to yield control to a cutscene, and maintains a registry of named CinematicStageMarkerComponent entities placed in each level.
For architecture details, component properties, and extending the system in C++, see the Framework API reference.

Contents
Stage Markers

Stage markers are named anchor entities placed in each level that serve as spatial reference points for cinematic sequences. Performers and camera systems look up markers by name at runtime to determine where actors should stand, face, or move to during a cutscene.
This design decouples authored dialogue data from level-specific layout. The same sequence asset plays in any level as long as that level provides CinematicStageMarkerComponent entities with the expected names.
| Component | Purpose |
|---|
CinematicStageMarkerComponent | Marks a named position in the level for cinematic staging. |
To register a marker, add CinematicStageMarkerComponent to an entity in the level and give it a name. The Cinematics Manager automatically discovers and registers all markers in the level on startup via RegisterStageMarker. At runtime, any system can retrieve a marker entity by name with GetStageMarker.
Cinematic Events
When a cinematic begins and ends, the Cinematics Manager broadcasts events on CinematicsManagerNotificationBus. Listen to these in any system that needs to yield or reclaim control during a cutscene — player input, HUD, AI, camera.
| Event | When It Fires | What to Do |
|---|
EnterCinematic | A cinematic sequence has started. | Disable player input, hide the HUD, suspend AI. |
ExitCinematic | The cinematic sequence has ended. | Re-enable input, restore HUD, resume AI. |
Starting and Ending Cinematics
Call BeginCinematic to signal that a cinematic is starting and EndCinematic when it completes. These calls broadcast EnterCinematic and ExitCinematic respectively. They do not drive animation or sequence playback directly — that is the role of DialogueSequencerComponent. The Cinematics Manager handles the global state change so all listening systems respond in one coordinated broadcast.
| Bus | Method | What It Does |
|---|
CinematicsManagerRequestBus | BeginCinematic | Broadcasts EnterCinematic to all listeners. |
CinematicsManagerRequestBus | EndCinematic | Broadcasts ExitCinematic to all listeners. |
CinematicsManagerRequestBus | RegisterStageMarker | Adds a marker to the registry by name. |
CinematicsManagerRequestBus | GetStageMarker | Returns the entity for a marker by name. |
ScriptCanvas Usage
Reacting to Cinematic State
To pause gameplay systems when a cinematic starts and resume them when it ends, connect to CinematicsManagerNotificationBus:

Triggering a Cinematic
To start a cinematic from a trigger or cutscene entity, call BeginCinematic, drive the sequence through the Dialogue Sequencer, then call EndCinematic on completion:

Looking Up a Stage Marker

Quick Reference
| Need | Bus | Method / Event |
|---|
| Start a cinematic | CinematicsManagerRequestBus | BeginCinematic |
| End a cinematic | CinematicsManagerRequestBus | EndCinematic |
| Register a stage marker | CinematicsManagerRequestBus | RegisterStageMarker |
| Retrieve a stage marker entity | CinematicsManagerRequestBus | GetStageMarker |
| Know when a cinematic starts | CinematicsManagerNotificationBus | EnterCinematic |
| Know when a cinematic ends | CinematicsManagerNotificationBus | ExitCinematic |
Glossary
| Term | Meaning |
|---|
| Stage Marker | A named anchor entity in a level used as a spatial reference for cinematic positioning |
| Cinematic | A global state where the Cinematics Manager has signaled that a cutscene is in progress |
For full definitions, see the Glossary.
See Also
For the full API, component properties, and C++ extension guide:
For related systems:
Get GS_Cinematics
GS_Cinematics — Explore this gem on the product page and add it to your project.
2 - Dialogue System
How to author and play back branching dialogue in GS_Play — dialogue databases, node types, conditions, effects, and the runtime sequencer.
The Dialogue System is the authoring and runtime core of GS_Cinematics. Dialogue content is stored in .dialoguedb assets (DialogueDatabase), which contain named actors and a collection of DialogueSequence records. Each sequence is a graph of polymorphic nodes. At runtime, GS_DialogueManagerComponent manages the database and maps performer names to entities in the level, while DialogueSequencerComponent drives playback — walking the graph, evaluating conditions on branches, executing effects, and emitting events that UI and other systems consume.
For architecture details, component properties, and extending the system in C++, see the Framework API reference.

Contents
Dialogue Database
Breakdown
A dialogue sequence is authored in the node editor, stored in a .dialoguedb asset, and driven at runtime by the Dialogue Manager and Sequencer:
| Layer | What It Means |
|---|
| DialogueDatabase | Stores named actors and sequences. Loaded at runtime by the Dialogue Manager. |
| DialogueSequence | A directed node graph. The Sequencer walks from startNodeId through Text, Selection, Effects, and Performance nodes. |
| Conditions | Polymorphic evaluators on branches. Failed conditions skip that branch automatically. |
| Effects | Polymorphic actions at EffectsNodeData nodes — set records, toggle entities. |
| Performers | Named actor anchors in the level. Resolved from database actor names via DialoguePerformerMarkerComponent. |
Conditions, effects, and performances are discovered automatically at startup — custom types from any gem appear in the editor without modifying GS_Cinematics.
E Indicates extensible classes and methods.
Patterns - Complete list of system patterns used in GS_Play.
DialogueDatabase Asset

The DialogueDatabase is a .dialoguedb asset authored in the O3DE node editor. It is the single source of truth for all dialogue content in a project section.
| Asset Contents | Purpose |
|---|
| Actors | Named character definitions with portrait and metadata. |
| Sequences | Named DialogueSequence records, each a graph of nodes. |
Load a database at runtime by calling ChangeDialogueDatabase on DialogueManagerRequestBus. The manager resolves performer names from the database against DialoguePerformerMarkerComponent entities placed in the current level.
Node Types
Each sequence is a directed graph of DialogueNodeData nodes. The sequencer walks the graph starting from startNodeId and advances through the nodes in order.
| Node Type | What It Does |
|---|
TextNodeData | Displays a speaker line. Supports LocalizedStringId for localization. |
SelectionNodeData | Presents the player with a list of choices. Branches based on selection. |
RandomNodeData | Selects a random outgoing branch. |
EffectsNodeData | Executes one or more DialogueEffect objects without advancing to a text node. |
PerformanceNodeData | Triggers a DialoguePerformance action and waits for OnPerformanceComplete before continuing. |
Conditions
Conditions are polymorphic objects attached to sequence branches. The sequencer evaluates all conditions on a branch before following it. Branches whose conditions fail are skipped.
| Condition Type | What It Evaluates |
|---|
Boolean_DialogueCondition | A base boolean comparison. |
Record_DialogueCondition | Checks a game record via the RecordKeeper system. Extends Boolean_DialogueCondition. |
Effects
Effects are polymorphic objects executed when the sequencer reaches an EffectsNodeData node. Effects can also be reversed.
| Effect Type | What It Does |
|---|
SetRecords_DialogueEffect | Sets one or more game records via the RecordKeeper system. |
ToggleEntitiesActive_DialogueEffect | Toggles one or more entities active or inactive. |
Performances are polymorphic objects executed when the sequencer reaches a PerformanceNodeData node. A performance can be blocking — the sequencer pauses and waits for OnPerformanceComplete before advancing — or non-blocking, where dialogue continues immediately after the performance fires.
Like conditions and effects, performance types are discovered automatically at startup via the type registry. Custom performance types from any gem appear in the editor without modifying GS_Cinematics.
| Performance Type | What It Does |
|---|
MoveTo_DialoguePerformance | Smoothly moves a named performer to a CinematicStageMarkerComponent position. Fires MoveTo_PerformanceNotificationBus — a companion component on the performer entity responds and moves it, then signals completion. |
PathTo_DialoguePerformance | Navigates a named performer to a marker using the scene navmesh. Uses RecastNavigation pathfinding through the world geometry rather than a direct interpolation. |
RepositionPerformer_DialoguePerformance | Instantly teleports a performer to a marker. Non-blocking — dialogue advances without waiting. |
Runtime Playback
GS_DialogueManagerComponent
The Dialogue Manager is the top-level manager for all dialogue. It holds the active DialogueDatabase, maps performer names to level entities via DialoguePerformerMarkerComponent, and is the entry point for starting sequences by name.
| Bus | Method | What It Does |
|---|
DialogueManagerRequestBus | StartDialogueSequenceByName | Starts a named sequence from the active database. |
DialogueManagerRequestBus | ChangeDialogueDatabase | Loads a different DialogueDatabase asset. |
DialogueManagerRequestBus | RegisterPerformerMarker | Registers a performer entity by name for the current level. |
DialogueManagerRequestBus | GetPerformer | Returns the entity for a named performer. |
DialogueSequencerComponent
The Dialogue Sequencer drives sequence playback. It walks the node graph, evaluates conditions, executes effects, triggers performances, and emits notifications when text lines begin and when the sequence completes. It is typically placed on a dedicated sequencer entity in the level alongside DialogueUIBridgeComponent.
| Bus | Method / Event | Purpose |
|---|
DialogueSequencerRequestBus | StartDialogueBySequence | Begins playback of a given sequence object. |
DialogueSequencerNotificationBus | OnDialogueTextBegin | Fires when a TextNodeData begins — carries speaker and text data. |
DialogueSequencerNotificationBus | OnDialogueSequenceComplete | Fires when the sequence reaches its end node. |
Localization
Text nodes store speaker lines as LocalizedStringId references rather than raw strings. A LocalizedStringId holds a key and a default fallback text. At runtime, the sequencer calls Resolve() on each LocalizedStringId, which looks up the key in the active LocalizedStringTable and returns the localized string for the current locale. If no table is loaded or the key is not found, the default text is returned.
To use localization, load a LocalizedStringTable asset through your project’s initialization flow before any dialogue plays.
ScriptCanvas Usage
Starting a Dialogue Sequence

Reacting to Sequence States
Listen on DialogueSequencerNotificationBus to receive speaker and text data as each line begins:

Quick Reference
| Need | Bus | Method / Event |
|---|
| Start a sequence by name | DialogueManagerRequestBus | StartDialogueSequenceByName |
| Load a different database | DialogueManagerRequestBus | ChangeDialogueDatabase |
| Register a performer in the level | DialogueManagerRequestBus | RegisterPerformerMarker |
| Get a performer entity | DialogueManagerRequestBus | GetPerformer |
| Start a sequence object directly | DialogueSequencerRequestBus | StartDialogueBySequence |
| React to a text line starting | DialogueSequencerNotificationBus | OnDialogueTextBegin |
| React to sequence completion | DialogueSequencerNotificationBus | OnDialogueSequenceComplete |
Glossary
| Term | Meaning |
|---|
| DialogueDatabase | A .dialoguedb asset containing actors and dialogue sequences |
| DialogueSequence | A graph of nodes that defines a single dialogue conversation |
| DialogueNodeData | A polymorphic node in the sequence graph (Text, Selection, Random, Effects, Performance) |
| DialogueCondition | A polymorphic evaluator attached to branches that gates progression |
| DialogueEffect | A polymorphic action executed at EffectsNodeData nodes (e.g., setting records) |
| DialoguePerformance | A polymorphic action executed at PerformanceNodeData nodes — moves, paths, or repositions performers. Can be blocking or non-blocking |
| Performer | A named actor entity in the level mapped from the database via DialoguePerformerMarkerComponent |
For full definitions, see the Glossary.
See Also
For the full API, component properties, and C++ extension guide:
For related systems:
Get GS_Cinematics
GS_Cinematics — Explore this gem on the product page and add it to your project.
2.1 - Dialogue UI
How to display dialogue text, player choices, and typewriter effects in GS_Play — screen-space and world-space UI components and the bridge that connects them to the sequencer.
The Dialogue UI layer is the display side of the GS_Cinematics system. It receives events from DialogueSequencerComponent through DialogueUIBridgeComponent and routes them to the correct UI implementation — screen-space for HUD-style dialogue or world-space for speech bubbles above actors. Player choices are handled by selection components, and the TypewriterComponent reveals text character-by-character. BabbleComponent optionally plays per-character audio babble to give speakers a voice.
For architecture details, component properties, and extending the system in C++, see the Framework API reference.

Contents
Component Overview
| Component | Space | Purpose |
|---|
DialogueUIComponent | Screen | Displays the current speaker line on the HUD. |
WorldDialogueUIComponent | World | Displays speech bubbles positioned above actors in 3D space. |
DialogueUISelectionComponent | Screen | Renders player choice options on the HUD. |
WorldDialogueUISelectionComponent | World | Renders player choice options in 3D world space. |
DialogueUIBridgeComponent | — | Routes sequencer events to UI and player input back to sequencer. |
TypewriterComponent | — | Reveals text one character at a time with configurable timing. |
BabbleComponent | — | Plays per-character audio babble for the active speaker. |
DialogueUIBridgeComponent
The Bridge component is the central connector between the sequencer and the UI. Place it on the same entity as DialogueSequencerComponent. It listens for OnDialogueTextBegin and OnDialogueSequenceComplete from the sequencer and forwards those events to whatever UI components are registered with it. It also receives player selection events from the selection UI and forwards them back to the sequencer.
This design keeps the sequencer and the display fully decoupled — swapping in a new UI implementation only requires registering it with the Bridge.
| Bus | Method | What It Does |
|---|
DialogueUIBridgeRequestBus | RunDialogue | Sends a text line to the registered dialogue UI. |
DialogueUIBridgeRequestBus | RunSelection | Sends selection options to the registered selection UI. |
DialogueUIBridgeRequestBus | RegisterDialogueUI | Registers a UI entity as the active dialogue display target. |
DialogueUIBridgeRequestBus | CloseDialogue | Tells the registered UI to close. |
DialogueUIBridgeNotificationBus | OnDialogueComplete | Fires when the dialogue UI reports it has finished displaying. |
DialogueUIBridgeNotificationBus | OnSelectionComplete | Fires when the player makes a selection. |
Dialogue Display Components
Screen-Space Text
DialogueUIComponent handles HUD-style dialogue display. Add it to a UI canvas entity. It exposes the active TypewriterComponent so other systems can check typewriter state or force completion.
World-Space Speech Bubbles
WorldDialogueUIComponent extends DialogueUIComponent for world-space placement. It positions the dialogue panel above the speaking actor’s entity in 3D space. Use this for over-the-shoulder dialogue or conversations where the camera stays in the world rather than cutting to a UI overlay.
Selection Components
Screen-Space Choices
DialogueUISelectionComponent renders the player’s available choices as a list on the HUD. Each choice is backed by a DialogueSelectButtonComponent entity that is configured with option text and a selection index. When the player activates a button, it fires back through the Bridge to the sequencer.
World-Space Choices
WorldDialogueUISelectionComponent extends DialogueUISelectionComponent for world-space display. Choices appear positioned in 3D space rather than as a HUD overlay, useful for games with diegetic UI.
TypewriterComponent

The TypewriterComponent reveals a string one character at a time. It fires OnTypeFired for each character revealed and OnTypewriterComplete when the full string is displayed. Use ForceComplete to instantly reveal the remaining text — typically wired to a player skip input — and ClearTypewriter to reset the display to empty.
| Bus | Method / Event | What It Does |
|---|
TypewriterRequestBus | StartTypewriter(text) | Begins revealing the given string character by character. |
TypewriterRequestBus | ForceComplete | Instantly reveals all remaining characters. |
TypewriterRequestBus | ClearTypewriter | Clears the display and resets state. |
TypewriterNotificationBus | OnTypeFired | Fires each time a character is revealed. |
TypewriterNotificationBus | OnTypewriterComplete | Fires when the full string has been revealed. |
BabbleComponent
BabbleComponent pairs with TypewriterComponent to play short audio sounds for each character revealed, giving the impression of a speaker’s voice. Each actor has a SpeakerBabbleEvents record that maps them to a specific babble sound profile. The component returns the correct BabbleToneEvent for the current speaker via GetBabbleEvent, which is called by the typewriter on each OnTypeFired.
| Bus | Method | What It Does |
|---|
BabbleRequestBus | GetBabbleEvent | Returns the babble audio event for the active speaker. |
ScriptCanvas Usage
Forcing Typewriter Completion on Skip Input
Wire a player input action to ForceComplete so pressing a button instantly reveals the current line:

Reacting to Typewriter Events

Quick Reference
| Need | Bus | Method / Event |
|---|
| Route sequencer events to UI | DialogueUIBridgeRequestBus | RunDialogue / RunSelection |
| Register a UI entity with the bridge | DialogueUIBridgeRequestBus | RegisterDialogueUI |
| Close the dialogue UI | DialogueUIBridgeRequestBus | CloseDialogue |
| React when dialogue UI finishes | DialogueUIBridgeNotificationBus | OnDialogueComplete |
| React when player makes a choice | DialogueUIBridgeNotificationBus | OnSelectionComplete |
| Start typewriter reveal | TypewriterRequestBus | StartTypewriter |
| Skip / instantly reveal text | TypewriterRequestBus | ForceComplete |
| Clear the typewriter display | TypewriterRequestBus | ClearTypewriter |
| React to each character reveal | TypewriterNotificationBus | OnTypeFired |
| React to full text revealed | TypewriterNotificationBus | OnTypewriterComplete |
| Get babble event for speaker | BabbleRequestBus | GetBabbleEvent |
Glossary
| Term | Meaning |
|---|
| DialogueUIBridge | The connector component that routes sequencer events to UI and player input back to the sequencer |
| Typewriter | A text reveal component that displays characters one at a time with configurable timing |
| Babble | Per-character audio playback that simulates a speaker’s voice during typewriter text reveal |
For full definitions, see the Glossary.
See Also
For the full API, component properties, and C++ extension guide:
For related systems:
Get GS_Cinematics
GS_Cinematics — Explore this gem on the product page and add it to your project.
2.2 - Performances
How to move and reposition actors during dialogue in GS_Play — the polymorphic performance system, built-in movement types, and async completion.
Performances are polymorphic actions that move or reposition actors during dialogue sequences. The sequencer triggers a performance when it reaches a PerformanceNodeData node and waits for OnPerformanceComplete before advancing. This async model lets multi-step actor choreography complete fully before dialogue continues. Three built-in performance types cover direct movement, navmesh navigation, and instant teleportation. Custom types can be created by extending the base class.
For architecture details, component properties, and extending the system in C++, see the Framework API reference.

Contents
When the sequencer encounters a PerformanceNodeData node, it:
- Resolves the named performer entity via
DialogueManagerRequestBus → GetPerformer. - Instantiates the performance object specified on the node.
- Calls
DoPerformance() — the public entry point. - Waits. The sequencer does not advance until the performance broadcasts
OnPerformanceComplete. - Resumes from the next node once completion is received.
The performance itself handles the movement logic, monitors completion, and signals back through its notification bus. This means a single PerformanceNodeData can represent any action that takes time — walking to a spot, running a path, playing an animation, triggering a VFX sequence — as long as it broadcasts completion when done.
| Performance Type | Movement Method | When to Use |
|---|
MoveTo_DialoguePerformance | Direct translation to marker(s) | Open areas, stylized movement, non-physical traversal. |
PathTo_DialoguePerformance | RecastNavigation pathfinding | Realistic navigation around obstacles and geometry. |
RepositionPerformer_DialoguePerformance | Instant teleport to marker | Off-screen repositioning between scenes, no visible movement needed. |
All three extend DialoguePerformance, the abstract base class. The base class provides DoPerformance(), ExecutePerformance(), and FinishPerformance() hooks, plus TickBus integration for per-frame movement updates.
MoveTo_DialoguePerformance
MoveTo_DialoguePerformance translates an actor toward one or more named stage markers using direct movement — no obstacle avoidance, no navmesh. It broadcasts movement requests over MoveTo_PerformanceNotificationBus. Listening systems (typically the performer’s movement component) receive those requests and execute the actual translation. When the actor reaches the final marker, the performance calls FinishPerformance() and broadcasts completion.
Use this for stylized games where physical path correctness is less important than snappy, predictable actor placement, or for any case where the path between actor and marker is guaranteed to be clear.
| Bus | Purpose |
|---|
MoveTo_PerformanceRequestBus | Query state of the performance. |
MoveTo_PerformanceNotificationBus | Receives move-to-marker requests from the performance. |
PathTo_DialoguePerformance
PathTo_DialoguePerformance navigates an actor to one or more named stage markers using the RecastNavigation navmesh. It requests a path from the navmesh, walks the actor along that path, and completes when the actor arrives at the final marker. Use this in games with detailed geometry where actors must walk around walls, furniture, and obstacles rather than moving in a straight line.
RecastNavigation must be enabled in the project and a navmesh must be baked in any level where PathTo performances are used.
| Bus | Purpose |
|---|
PathTo_PerformanceRequestBus | Query state of the performance. |
PathTo_PerformanceNotificationBus | Receives path-to-marker requests from the performance. |
RepositionPerformer_DialoguePerformance
RepositionPerformer_DialoguePerformance teleports an actor instantly to a named stage marker. It does not animate, translate, or navigate — it sets position directly. Useful for placing actors at the start of a new scene, recovering from a previous sequence that ended far from the required starting point, or repositioning actors that are off-camera and do not need visible movement.
| Bus | Purpose |
|---|
RepositionPerformer_PerformanceNotificationBus | Receives teleport requests from the performance. |
Async Completion
All performances signal completion asynchronously. The sequencer does not poll or time out — it simply waits for the performance to call FinishPerformance(), which broadcasts OnPerformanceComplete over the appropriate notification bus. This means:
- A performance can take any amount of time.
- A performance can be driven by external events — animation callbacks, physics arrival, etc.
- Multiple performances can run in parallel if the node graph is structured to fork, because each notifies independently.
When writing custom performance types, always call FinishPerformance() when the action is done. Forgetting to do so will stall the sequencer indefinitely.
Extending with Custom Performances
Custom performance types are discovered automatically through O3DE serialization at startup. Extend DialoguePerformance, reflect it, and your custom type appears in the node editor’s performance picker and can be placed on any PerformanceNodeData node.
See the Framework API reference for the full base class interface and extension guide.
ScriptCanvas Usage
Performances are authored in the dialogue node graph and executed automatically by the sequencer. Most projects do not need to drive performances from ScriptCanvas directly. The common scripting patterns involve the movement side — receiving move or path requests from a performance and executing them on the performer entity.
Receiving a MoveTo Request
[MoveTo_PerformanceNotificationBus → StartMoveToMarker(markerEntity)]
└─► [Move performer toward markerEntity position]
└─► [When arrived → MoveTo_PerformanceRequestBus → ReportArrival]
Receiving a Reposition Request
[RepositionPerformer_PerformanceNotificationBus → RepositionToMarker(markerEntity)]
└─► [Set performer transform to markerEntity transform]
Quick Reference
| Need | Bus | Method / Event |
|---|
| Receive a MoveTo move request | MoveTo_PerformanceNotificationBus | StartMoveToMarker |
| Receive a PathTo navigation request | PathTo_PerformanceNotificationBus | StartPathToMarker |
| Receive a reposition teleport request | RepositionPerformer_PerformanceNotificationBus | RepositionToMarker |
| Query active MoveTo state | MoveTo_PerformanceRequestBus | (see Framework API) |
| Query active PathTo state | PathTo_PerformanceRequestBus | (see Framework API) |
Glossary
| Term | Meaning |
|---|
| Performance | A polymorphic action that moves or repositions an actor during a dialogue sequence |
| PerformanceNodeData | A dialogue graph node that triggers a performance and waits for completion |
| Async Completion | The pattern where the sequencer waits for OnPerformanceComplete before advancing |
For full definitions, see the Glossary.
See Also
For the full API, component properties, and C++ extension guide:
For related systems:
Get GS_Cinematics
GS_Cinematics — Explore this gem on the product page and add it to your project.