About Simple Dialogue System
- Tools, Systems & Learning > Game Templates & Systems
- Art & Visuals > UI & GUI
Simple Dialogue System is a lightweight dialogue and conversation tool built for the way most games actually use dialogue: linear lines, a branching choice here and there, maybe a flag check, maybe a second language. It skips the visual node-graph editor entirely, every conversation is authored as a plain list right in the Inspector, so there's nothing new to learn and nothing to keep in sync with a separate asset.
Drag-and-drop from the start
Add a DialogueRunner and a DialogueConversationSource to any GameObject with a Canvas, write your first node, and press Play.
Node events are wired up exactly like a Button's OnClick, no event assets, no listener components, just point at a GameObject and pick a method.
Everything you'd expect from branching dialogue
- Linear lines and branching player choices, linked by simple string node IDs.
- Per-character speaker data: name, default portrait, and any number of named emotion portraits, reusable across every conversation that character appears in.
- A typewriter reveal effect that's rich-text safe, with an optional typing blip sound, your own clip, played every Nth character at a randomized pitch so it never sounds robotic. Give an individual character their own dedicated blip clip and it plays instead of the default one whenever they're speaking, so different speakers can sound different.
- Per-node events (UnityEvent), so a line can trigger an animation, a sound, a quest flag, anything, the moment it's shown.
- One dialogue UI, many conversations: a single DialogueRunner can serve every NPC in a scene, each with its own DialogueConversationSource.
Conditional choices, kept simple
Gate a choice behind a named true/false flag, has the key, already met this NPC, reputation high enough, etc, with DialogueConditions.Set() and a Required Flag field.
Deliberately no variable types or expression syntax to learn. Need your own save system to persist flags? CaptureSnapshot() / RestoreSnapshot() hand you everything as one plain serializable object, save it however your game already saves everything else.
Optional multi-language support
Any line or choice can carry more than one language, authored right on the same field, no separate localization table, no keys to manage.
Leave it untranslated and it just shows the original text.
Auto-advancing lines
Let a line move itself along after a delay, or trigger Advance() yourself from an animation event or cutscene, your choice, per node.
Optional per-character text animation
Add a DialogueTextAnimator alongside your Body Text and pick a Reveal Effect (Pop In Grow/Shrink, Fade In, or Rise Up/Down) that plays once on each character as the typewriter types it, no extra wiring needed. Want a word to keep moving while it's on screen? Wrap it in a tag right in the dialogue text, like Tony gets scared often., for a continuous Wave, Shake, or Pulse effect on just that word. Both layers are entirely optional; leave them off and text types out exactly as plain as before. Want a whole character to animate differently, no tags needed? Give a DialogueCharacterSO its own Reveal Effect and/or Ambient Loop Effect, so a jittery, always-shaking ghost can share a conversation with a character whose lines don't animate at all.
Four ready-to-run demo scenes
They show off the plain conversation, the localization workflow, the conditional-choice workflow, and one shared dialogue UI serving two separate NPCs, each generated with one menu command and fully editable as a working example.
Third-party asset disclosure
The demo scenes' UI text uses the Anta typeface, by The Anta Project Authors, licensed under the SIL Open Font License 1.1 (full license text bundled at Demo/Fonts/Anta/OFL.txt). Used unmodified, bundled as part of this package (not sold standalone), which the OFL permits freely.
Dependencies
No external dependencies beyond TextMeshPro, 2D Sprite and uGUI.
Drag-and-drop from the start
Add a DialogueRunner and a DialogueConversationSource to any GameObject with a Canvas, write your first node, and press Play.
Node events are wired up exactly like a Button's OnClick, no event assets, no listener components, just point at a GameObject and pick a method.
Everything you'd expect from branching dialogue
- Linear lines and branching player choices, linked by simple string node IDs.
- Per-character speaker data: name, default portrait, and any number of named emotion portraits, reusable across every conversation that character appears in.
- A typewriter reveal effect that's rich-text safe, with an optional typing blip sound, your own clip, played every Nth character at a randomized pitch so it never sounds robotic. Give an individual character their own dedicated blip clip and it plays instead of the default one whenever they're speaking, so different speakers can sound different.
- Per-node events (UnityEvent), so a line can trigger an animation, a sound, a quest flag, anything, the moment it's shown.
- One dialogue UI, many conversations: a single DialogueRunner can serve every NPC in a scene, each with its own DialogueConversationSource.
Conditional choices, kept simple
Gate a choice behind a named true/false flag, has the key, already met this NPC, reputation high enough, etc, with DialogueConditions.Set() and a Required Flag field.
Deliberately no variable types or expression syntax to learn. Need your own save system to persist flags? CaptureSnapshot() / RestoreSnapshot() hand you everything as one plain serializable object, save it however your game already saves everything else.
Optional multi-language support
Any line or choice can carry more than one language, authored right on the same field, no separate localization table, no keys to manage.
Leave it untranslated and it just shows the original text.
Auto-advancing lines
Let a line move itself along after a delay, or trigger Advance() yourself from an animation event or cutscene, your choice, per node.
Optional per-character text animation
Add a DialogueTextAnimator alongside your Body Text and pick a Reveal Effect (Pop In Grow/Shrink, Fade In, or Rise Up/Down) that plays once on each character as the typewriter types it, no extra wiring needed. Want a word to keep moving while it's on screen? Wrap it in a tag right in the dialogue text, like Tony gets scared often., for a continuous Wave, Shake, or Pulse effect on just that word. Both layers are entirely optional; leave them off and text types out exactly as plain as before. Want a whole character to animate differently, no tags needed? Give a DialogueCharacterSO its own Reveal Effect and/or Ambient Loop Effect, so a jittery, always-shaking ghost can share a conversation with a character whose lines don't animate at all.
Four ready-to-run demo scenes
They show off the plain conversation, the localization workflow, the conditional-choice workflow, and one shared dialogue UI serving two separate NPCs, each generated with one menu command and fully editable as a working example.
Third-party asset disclosure
The demo scenes' UI text uses the Anta typeface, by The Anta Project Authors, licensed under the SIL Open Font License 1.1 (full license text bundled at Demo/Fonts/Anta/OFL.txt). Used unmodified, bundled as part of this package (not sold standalone), which the OFL permits freely.
Dependencies
No external dependencies beyond TextMeshPro, 2D Sprite and uGUI.
Current offers including this asset
-
View offer
Unity New Release Discount 2026-10-27 2026-11-10
Ends Nov 10, 2026
-
View offer
Unity New Release Discount 2026-10-27 2026-11-10
Ends Nov 10, 2026