Dialogue System
Note: These tools are in preview We follow a “dogfood” development approach—these tools are actively used and developed within our current WIP games. They are mature enough to share with our GitHub and Patreon supporters, so their documentation is provided here for early adopters.
The Dialogue System is a designer-friendly tool built to support modular, branching conversations with audio, UI, and logic control fully encapsulated within a single Actor Component. It is built on Unreal Engine’s UCommonActivatableWidget framework and is designed for extensibility and ease of use by non-programmers.
What It Is
The system centres around a UDialogueComponentBase
that designers extend via Blueprint (optionally C++) to define specific conversations. All dialogue logic is implemented within the Event Dialogue
node in Blueprint, providing a highly intuitive, node-based interface for creating branching narrative flows.
Core Features
Activatable Widget Integration: Conversations are managed through the Common UI framework.
OpenConversation()
instantiates and pushes a dialogue widget onto the stack.Designer-Driven Flow: The
Dialogue()
event is called when a conversation begins or progresses. Designers useAdd Dialogue
Blueprint nodes to define steps.Index-Based Progression: Internally tracks conversation progress via
ActiveIndex
. EachAdd Dialogue
call increments this index.Stateful Traversal: If a dialogue step has already been visited (tracked via
ActiveProgress
), the system automatically passes through it to re-enter the correct state.Dynamic UI Updates: On encountering a new dialogue index,
Add Dialogue
updates the widget's speaker text, body, and options. Optional voice-over audio can also be played.Player Choice Handling: When the player selects an option in the widget, it calls
UpdateSelectedOption()
, which records the choice and triggersProgressDialogue()
to continue the flow.Branching Support: Built-in
SetDialogueBranch()
allows the system to store and swap between progress states tied to named dialogue branches.Runtime Tools: Designers can:
Clear Dialogue Progress()
– reset to the start.Remove Dialogue Progress(N)
– roll back a number of steps.Close Dialogue()
– exit and clean up the widget.
Designers can use any Blueprint nodes they like to test answers, modify options or control dialogue branching
Dialogue state is tracked as simple index values e.g. the index of the step and the index of the option chosen, making it trivial and compact to save conversation state.
Designer Workflow
Create an Actor Component derived from
DialogueComponentBase
.Implement
Event Dialogue
to define the flow usingAdd Dialogue
nodes.Optionally attach audio assets to each line.
Connect the component to any actor (e.g. NPCs).
Call
OpenConversation()
from gameplay triggers or interactions.
Example Flow
OpenConversation()
→ creates the widget → callsProgressDialogue()
.ProgressDialogue()
→ increments index → callsDialogue()
.Designer’s
Dialogue()
logic responds by callingAdd Dialogue(...)
.If dialogue at current index is new, UI updates with speaker, line, options.
Player selects an option → triggers
UpdateSelectedOption()
→ loops again.
Last updated