Typewriter Text
Revealing dialog one character at a time, with pauses that give the line a voice.
Examples
Captured from this page's own interactive demo below.
Overview
Typewriter text prints dialog and narration character by character instead of dumping the whole line at once — the RPG and visual-novel staple that's been pacing game conversations since the 8-bit era.
It works because the reveal speed becomes the character's voice: a steady tick reads as calm narration, a fast burst as excitement, and a held pause after a comma or ellipsis lands like an actor's beat. The same sentence performs completely differently at different speeds.
It also controls information flow — the player reads exactly as fast as the game speaks, so a dramatic reveal can't be skimmed. Paired with per-character blips (see Pitch Randomization), it's most of what people remember as 'that game's talk sound'.
Interactive Demo
Use Cases
Best Practices
Do
- ✓Hold an extra beat after punctuation — that pause is where the 'voice' lives; flat per-character timing reads robotic.
- ✓Let a press skip to the full line instantly — players re-reading dialog will hate a slow reveal they can't fast-forward.
- ✓Reveal characters with TMP's maxVisibleCharacters (or equivalent) instead of rebuilding the string, so layout never reflows mid-line.
Don't
- ✕Don't play a sound on literally every character at high speeds — rate-limit the blips or they merge into a buzz.
- ✕Don't run the reveal on scaled game time — dialog during slow motion or pause menus should keep its own clock.
- ✕Don't use it for HUD or system messages the player needs instantly — it's a pacing tool for dialog, not a default.
Common Mistakes
- ⚠Appending to the string per character, causing word-wrap to jump as words grow — reveal from the full laid-out text instead.
- ⚠Ignoring rich-text tags when counting characters, so <color> markup visibly types itself out.
- ⚠Restarting the whole line when the window re-opens instead of remembering it was already shown.
Implementation
Paste this into your AI assistant (Cursor, Copilot, Claude) to add the effect to your project.
Add the "Typewriter Text" game-feel effect to my project: Revealing dialog one character at a time, with pauses that give the line a voice.
How it works: Typewriter text prints dialog and narration character by character instead of dumping the whole line at once — the RPG and visual-novel staple that's been pacing game conversations since the 8-bit era.
Guidelines:
- Hold an extra beat after punctuation — that pause is where the 'voice' lives; flat per-character timing reads robotic.
- Let a press skip to the full line instantly — players re-reading dialog will hate a slow reveal they can't fast-forward.
- Reveal characters with TMP's maxVisibleCharacters (or equivalent) instead of rebuilding the string, so layout never reflows mid-line.
Avoid:
- Don't play a sound on literally every character at high speeds — rate-limit the blips or they merge into a buzz.
- Don't run the reveal on scaled game time — dialog during slow motion or pause menus should keep its own clock.
- Don't use it for HUD or system messages the player needs instantly — it's a pacing tool for dialog, not a default.
Implement the effect in whatever engine/stack the project already uses and follow its existing code style. Wire it up where it makes sense.References
- TextMesh Pro — maxVisibleCharacters
- Undertale / Pokémon dialog — canonical typewriter voices
Related Effects
Audio Pitch Randomization
Slightly varying the pitch of repeated sounds so they never feel machine-gunned.
Score Ticker
Rolling a score up to its new value instead of snapping, so gains feel earned.
Button Press
Giving a button real, tactile feedback the instant it's pressed.
Comments
…