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 (`<color=...>`, `<b>`,
etc. never get cut mid-tag), 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 <shake>scared</shake> 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
(https://fonts.google.com/specimen/Anta), 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.
Updates
Missing a feature or a panel layout you need?
Just ask, send a message through the Asset Store publisher page,
or email info@team2studio.com, and it'll be considered for a future update.