Thank you for visiting this site.
This article provides a detailed guide to “Dialogue”, one of Game Creator 2’s modules — a comprehensive conversation system.
Dialogue is a full-featured conversation system that covers NPC conversations, branching choices, random responses, portraits/expressions, skin switching, timeline-linked animation, and dynamic value insertion.
Official documentation: Game Creator 2 Documentation
You can find a complete list of all articles in this series here:
What is Dialogue?
- A branching conversation system. Handles NPC dialogue, choices, conditional branching, expression changes, portrait display, and typewriter effects all in one package
- Conversation trees are composed of node sequences (3 types: Text / Choices / Random)
- Actor (speaker) assets let you reuse NPC character settings
- Skins (UI themes) can be swapped to instantly change the look — speech bubble style, SMS style, pixel, Cyberpunk style, and more
Installation
- Purchase the Dialogue module from the Asset Store
- Install via
Window > Package Manager - Select samples from
Game Creator > Install...:- Examples: Sample scene collection for various use cases
- Skin Default: Simple standard skin
- Skin Message: SMS / chat style
- Skin Pixel: Fantasy-oriented float display
- Skin Cyberpunk: Glitch-effect HUD style
- Examples depend on all Skin types (auto-resolved)
Dialogue Component
Creation
- Right-click in Hierarchy →
Dialogue > Dialogue - Or add
Add Component > Dialogueto an existing GameObject
All conversation text is written within this component, edited by expanding/collapsing multiple panels.
Anatomy of a Dialogue (4-Panel Layout)
Top Toolbar
- Left: Add new node (Text / Choice / Random)
- Hold Shift while clicking to toggle between “child / sibling” placement
- Top right: Gear button (toggle Settings sidebar) / Square button (toggle Inspector sidebar)
Settings Sidebar
- Configuration: Which Skin to use, whether affected by time scale, etc.
- Actors: List of Actors used in the conversation (auto-collected). Bind scene references to each Actor
- Editor: Editor display appearance (no effect on game behavior)
Conversations (Center Main)
A tree view of the conversation flow. Evaluated top to bottom, child nodes first, then proceeding to the next sibling.
- Double-click a node to toggle/focus the right Inspector
- Drag & drop nodes to reorder. Drop onto another node to make it a child node
Inspector Sidebar
Edit details of the selected node. Main fields:
- Type: Text / Choice / Random
- Conditions: Conditions required to execute this node
- Portrait: Portrait display position (None / Primary / Alternate)
- Actor: Speaker Actor asset. If Expressions are available, you can also select an expression
- Text: Display text (rich text supported)
- Add Value…: Dynamic values (described later)
- Audio: Voice audio clip
- Animation: Animation Timeline (described later)
- On Start / On End: Instructions that run when display starts/ends
- Duration: Display time. One of the following:
- Until Interaction: Wait for user input (default)
- Timeout: Specified seconds
- Audio: Until the audio clip ends
- Animation: Until the animation clip ends
- Jump: Specify the next node to proceed to. Can jump to tags, end the Dialogue, etc.
If you select Audio/Animation as Duration but don’t set an asset, the node will be skipped immediately.
Zero to Start! Unity Game Development — Your First TextbookView on Amazon →
C# Programming Through Unity 3D Game DevelopmentView on Amazon →
Nodes
Text (Most Basic)
A node that displays one line of text on screen. Can have child nodes (children are evaluated if the parent Text’s conditions are met). Rich text tags like <color> and <size> are supported.
Choices
A node that presents choices to the player. Child nodes (typically Text) automatically become the choices.
Main options:
- Hide Unavailable: Hide / gray out choices whose conditions aren’t met
- Hide Visited: Remove choices that have already been selected
- Skip Choice: After selecting a choice, skip reading that Text body
- Shuffle Choices: Randomize the order
- Timed Choice: Add a time limit
- Duration: Time limit in seconds
- Timeout: What to select on timeout (Random / First / Last)
Random
Randomly selects one child node (no user input).
- Allow Repeat: Whether the same selection can occur consecutively
Use case: Making a merchant’s greeting different each time, etc.
Dynamic Values
A mechanism for embedding variables, stats, and local values into text.
Local Dynamic Values
- Set per node. Referenced by index (zero-based)
- Writing
{0}in text replaces it with the value at index 0 - Bold / Italic / Color can be applied individually
Global Dynamic Values
- Shared across the entire project. Created in
Game Creator > Settings > Dialogue - Each entry has a Key (unique ID), and in text you wrap the key in curly braces like
{player-name} - Bold / Italic / Color can be specified
For values common to all Dialogues like the player name, using Global is most efficient.
Animation Timeline
Each node’s Animation field is not just a simple Gesture playback — it’s a tool that lets you insert instructions at any point on a timeline.
- Drop an Animation Clip to reveal a preview + sequencer UI below
- Markers (diamond shapes): Fire instructions at specific points on the timeline. Drag to adjust position
+button to add a new Marker at the current position,-to delete the selected Marker
Important: If a Dialogue line is skipped before the animation ends, the remaining Markers will not execute. Place any must-run logic in On Start / On End.
Tags (Node Identifiers)
- Right-click a node →
Tag...to assign a name - Use case 1: Looping conversations by jumping to a tag via the
Jumpfield - Use case 2: Using the
Tag VisitedCondition to check “whether that line has been reached”
Tag names must be unique within the Dialogue and consist of alphanumeric characters only (no spaces or symbols).
Actors (Speakers) and Expressions
Actor Asset
Create via Create > Game Creator > Dialogue > Actor.
- Name / Description: Display name and description (optional)
- Expressions: List of expressions. Enumerate anger, surprise, confusion, etc.
- Effects:
- Typewriter: Display text one character at a time. Frequency specifies characters per second
- Gibberish: Play “speech-like sounds” for unvoiced characters. Randomizes pitch/speed
- Optional Skin: Per-Actor Speech Skin override (e.g., a different font/bubble for robot characters only)
- Default Portrait: Default portrait position
Expressions
Added as child elements of an Actor.
- ID: Unique name
- Sprite: Portrait image
- Speech Skin: Optional. Overrides the Actor’s setting
- On Start / On End: Instructions for expression transitions (Gesture playback, State changes, etc.)
On End is called when switching to the next Expression, so it doesn’t fire during consecutive lines with the same expression.
Skins
Dialogue Skin (Theme)
The overall appearance of the conversation UI. Set by dragging from the Settings sidebar.
Main components:
- Prefab: UI prefab (Canvas + Dialogue UI component)
- Animations: Animations for start / loop / end
- Sound Effects: Start, Finish, Select (choice hover), Submit (choice submit)
- Nodes (v2.2.8+): Default values for Text / Choice / Random
Speech Skin (Speech Bubble)
The speech bubble UI for a single speaker. Referenced by the Dialogue Skin, but can be overridden per Actor.
- Prefab: UI schema
- Animations: Start / loop specification. Options like play every line / skip for consecutive same speaker are available
- Sound Effects: Sounds for line start / end
- Override Log: Override the log UI layout
User Interface (How to Create Custom Skins)
Official recommendation: Duplicating an existing skin and modifying it is the fastest route.
Minimum Custom Dialogue Skin Structure
On the root GameObject:
- Canvas component
- Dialogue UI component (2 fields)
- Speech: RectTransform where Speech Skins are instantiated
- Default: Default Speech Skin
Optional Additional Components
| Component | Role |
|---|---|
| Dialogue Unit Timer UI | Countdown display for Timed Choice |
| Dialogue Unit Choices UI | Choice layout and appearance |
| Dialogue Unit Logs UI | Past log display |
| Dialogue Unit Portraits UI | Current speaker’s portrait display |
Minimum Custom Speech Skin Structure
Root has a Speech UI component. Main fields:
- Active: GameObject reference shown only during speech
- Actor Name / Actor Description: Corresponding Text references (auto-updated)
- Active Portrait / Portrait Image: Portrait display toggle and Sprite reflection
- Text: Body text Text component (required)
- Skip: GameObject for the “next” cursor
Visual Scripting Reference
Instructions (4)
| Instruction | Function | Main Parameters |
|---|---|---|
| Play Dialogue | Play a Dialogue | Dialogue / Wait to Finish |
| Stop Dialogue | Stop a playing Dialogue | Dialogue |
| Choice Index | Select a choice by index (1-based) | Index |
| Skip Line | End the current line / advance to next | Speech UI |
Conditions (2)
| Condition | Check |
|---|---|
| Dialogue Played | Whether the specified Dialogue has been played |
| Tag Visited | Whether a Tag in the specified Dialogue has been visited |
Events (4)
| Event | Fires When |
|---|---|
| On Start Dialogue | When Dialogue playback starts |
| On Finish Dialogue | When Dialogue playback ends |
| On Start Dialogue Line | When a line starts displaying |
| On Finish Dialogue Line | When a line finishes displaying |
Tips and Notes
- Jump behavior: If the target node tag doesn’t exist or has a typo, you’ll get an error. Check early
- Skip Choice = ON is a “proceed without saying” mode. The choice appears in the UI, but the body Text is not read
- Auto-selection for Single Choice: If only one choice meets its conditions, the player interaction is skipped
- Duration = Audio/Animation with empty asset: Will be skipped immediately — always assign an asset
- Animation Markers expire on skip: Place important logic in On Start/On End
- Expression On End timing: Not called while the same expression continues. If you need a reset at the end, explicitly insert a different expression at the last node
- Typewriter + Gibberish: Combining them easily creates a “classic RPG feel”
- Global Dynamic Values are managed via settings: Managed project-wide in the
Game Creator > Settings > Dialoguetab - 4 Skins included with installation: Copy the closest one and modify it for the fastest results
- Tag names cannot contain spaces/symbols: Hyphen-separated names like
hello-worldare safe
Practical Usage — Configuration Guide by Goal
Start a conversation when approaching an NPC
Place a Trigger (Event: On Interact) on the NPC side and play with the Play Dialogue instruction. Turn on Wait to Finish to wait for subsequent processing until the conversation ends.
Present choices to the player and branch based on selection
Place multiple Text nodes as children of a Choice node. Adding Conditions to each choice Text lets you hide/gray out choices whose conditions aren’t met.
Time-limited choices (Timed Choice)
Turn on the Choice node’s Timed Choice and set the Duration and Timeout (behavior when time runs out).
NPC greets with randomly different lines
Simply place multiple Text nodes as children of a Random node. Turn off Allow Repeat to prevent the same line from appearing consecutively.
Conditional choices linked to Stats
Add Compare Stat to the Conditions of each choice Text node (e.g., str >= 15). If the condition isn’t met, child nodes are skipped as well.
Display dynamic values like the player name during conversation
Local: Add an index under the node’s “Add Value…” and write {0} in the body text.
Global: Define a Key in the settings screen and write {key-name} in the body text.
Switch character expressions during conversation
Add expressions to the Actor asset’s Expressions list and select the Expression from the dropdown in each node’s Inspector. The standard approach is to start the expression State in On Start and stop the State in On End.
Change text display speed per character
Adjust the Frequency (characters displayed per second) in the Actor asset’s Typewriter section. Combining with Gibberish easily creates a classic RPG-style effect.
Give a specific character a different-looking speech bubble
Set a dedicated Speech Skin in the Actor asset’s Optional Skin field.
Insert animation events at specific timing during conversation
Drop an Animation Clip into the Animation field and place Instructions at any timing using Markers on the timeline.
Create looping conversations with Jump
Add a Tag to the loop destination node and specify the Tag name in the last node’s Jump. Using Tag Visited also enables branching between first visit and subsequent visits.
Auto-wait until voice clip ends in voiced conversations
Set a voice AudioClip in the Audio field and select Audio for the Duration.
The Game Developer's Map: Lessons from 20 Years of Solo DevelopmentView on Amazon →
Indie Game Survival GuideView on Amazon →
Official Links
- Game Creator 2 Official Documentation
- Game Creator 2 — Unity Asset Store
- Dialogue 2 | Game Creator 2 — Unity Asset Store
Summary
This article covered the Dialogue module for Game Creator 2.
The Dialogue module provides a complete set of features needed for in-game conversation presentation, including branching conversations, choices, random responses, expression switching, typewriter effects, and dynamic value insertion.
Its greatest strengths are the ability to instantly change the look by swapping Skins (UI themes), and the Actor/Expression system that makes it easy to express each character’s personality.
We hope you’ll continue reading our next article as well.
📚 Series: Game Creator 2 Complete Guide (9/16)