> For the complete documentation index, see [llms.txt](https://docs.febucci.com/text-animator-unreal/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.febucci.com/text-animator-unreal/typewriter/show-and-hide-letters-dynamically.md).

# Show and hide letters dynamically

You can use `Typewriters` to show and hide letters dynamically, choosing different pauses for any kind of characters (punctuation, letters, \[…]), trigger events and more.

{% hint style="info" %}
A typewriter uses the Animated Text Block widget's **Time Scale** to progress time, you can read more here: [Time Scale](/text-animator-unreal/effects/preview-and-edit-effects/time-scale.md)
{% endhint %}

***

## Showing Text <a href="#showing-text" id="showing-text"></a>

There are different types of typewriters, for example “`By Character`” which shows one letter after the other, or “`By Word`” which progresses text word after word.

After choosing which Typewriter to use (which means: after selecting it in the Typewriter variable of the Animated Text Block widget), you can start it in two main ways:

### A) Via Code (Recommended) <a href="#a-via-code-recommended" id="a-via-code-recommended"></a>

Replacing, for example,&#x20;

“`TextBlock->Text = TextValue;`” with “`AnimatedTextBlock->Typewriter->ShowText(TextValue);`”  in your code.

{% hint style="danger" %}
Please don't miss this step if you're setting the text via code! If you're having issues, take a look at the [Best Practices](/text-animator-unreal/other/best-practices.md)
{% endhint %}

### B) Via the “Easy Integration” <a href="#b-via-the-easy-integration" id="b-via-the-easy-integration"></a>

Enabling the “`Typewriter Starts Automatically`” option in the Animated Text Block details (p.s. this was previously called “Easy Integration”).\
This will let the plugin automatically check for text changes and start the typewriter based on it.

![](/files/zFXnZpdn3jk6lSVc3X4D)

![](/files/KRLFdWvJj2pjR1Vu9Of8)

***

## Controlling Letters

### Start and Stop Typing <a href="#start-and-stop-typing" id="start-and-stop-typing"></a>

Among the typewriter properties, you’ll find some options to control how the typewriter start should be triggered:

![](/files/aXnrDplNDcFhWz5fD4JR)

* `Start Typewriter Mode Flags`: tells the typewriter when to start showing letters.

<table><thead><tr><th width="300">Value</th><th>Explanation</th></tr></thead><tbody><tr><td><strong>From Script Only</strong></td><td>The typerwiter can only be started by invoking Typewriter->StartShowingText() </td></tr><tr><td><strong>OnConstruct</strong></td><td>The typewriter starts as soon as the widget is constructed</td></tr><tr><td><strong>OnShowText</strong></td><td>The typewriter starts as soon as a new text is set (<a href="#showing-text">as explained in the “Showing Text” section</a>)</td></tr><tr><td><strong>Automatically From All Events</strong></td><td>All of the above</td></tr></tbody></table>

* `Reset Typing Speed At Startup`: true if you want the typewriter’s speed to reset back to 1 every time a new text is show, otherwise it will save the last one used.

{% hint style="success" %}
You can pause the typewriter at any time by invoking `Typewriter->StopShowingText()`, and you can start/resume it by invoking `Typewriter->StartShowingText()`.
{% endhint %}

### Skip the Entire Text <a href="#skip" id="skip"></a>

To Skip the entire typewriter, you can invoke the `Typewriter->SkipTypewriter()` method.

You can also find a few options to control how it behaves:

* `Hide Appearances On Skip`: true if you want to prevent appearance effects from playing whenever the typewriter skips (meaning that the text will be shown instantly).
* `Trigger Events On Skip`: true if you want to trigger all remaining events once the typewriter skips (be careful with that if you’re running some game logic with them, as everything will be run at once). Read more about events here: [Trigger Events when typing](/text-animator-unreal/typewriter/trigger-events-when-typing.md)

### Skip Specific Parts of the Text

You can use the "<`notype>`" tag to skip the typewriter under specific sections of the text. For example "`Hello <notype>I am shown instantly</notype> and now I'm typing normally again.`"

{% hint style="success" %}
You can also change this tag in the global settings, in case you prefer to set a different one.
{% endhint %}

### Hiding Text <a href="#hiding-text" id="hiding-text"></a>

You can hide letters dynamically via script, by invoking `Typewriter->StartDisappearingText()`, and you can also stop it at any time by invoking `Typewriter->StopDisappearingText()`. **Note: update docs links.**

You can also test this in the editor through dedicated controls in the section of the AnimTextBlock details called "Preview Effects".

<figure><img src="/files/cKCqFR7ZHTUeW1svkmmT" alt="" width="494"><figcaption></figcaption></figure>

***

{% hint style="info" %}
You can create your own typewriter (read [here ](/text-animator-unreal/customization/extra-customization-via-c++-blueprints/writing-custom-typewriters-c++.md)how to create a custom typewriter via C++) or you can use the built-in one.
{% endhint %}

## Options <a href="#options" id="options"></a>

Typewriters might share the same settings and also have specific ones, so be sure to hover the mouse cursor above their fields in the Details window to show the tooltips for each one.

Here is a quick overview of the most important/common ones:

### Callbacks (Delegates) <a href="#callbacks-unity-events" id="callbacks-unity-events"></a>

You can use Unreal Delegates that will be triggered based on the typewriter activity (example: when it just ended showing text).

<table><thead><tr><th width="288">Delegate</th><th>Explanation</th></tr></thead><tbody><tr><td><code>FOnTextShowed</code></td><td>Delegate called after the entire text has been shown (<em>if you’ve set “Use Typewriter” to true, it will wait until all letters are shown</em>)</td></tr><tr><td><code>FOnTextDisappeared</code></td><td>Called as soon as the typewriter starts hiding the last letter</td></tr></tbody></table>

The following delegates below only work if the “**Use Typewriter**” is set to **true**:

<table><thead><tr><th width="288">Event</th><th>Explanation</th></tr></thead><tbody><tr><td><code>FOnTypewriterStart</code></td><td>Called right before the typewriter starts showing its first letter.<br>It doesn’t work if the typewriter is off, since it would coincide with the <code>FOnTextShowed</code> delegate <em>(in this case you can use that one instead)</em></td></tr><tr><td><code>FOnCharacter(FString Char)</code>     </td><td>Called each time a character became visible</td></tr><tr><td><code>FOnMessage(FEventMarker Marker)</code></td><td>Invoked every time the typewriter meets a message/event in text. Read more about events <a href="/pages/h5O4iRXnjNig3xPDmP5P">here</a></td></tr></tbody></table>

{% hint style="info" %}
You can hover the mouse above the typewriter options (e.g. delays) to show some tooltips and extra information!
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.febucci.com/text-animator-unreal/typewriter/show-and-hide-letters-dynamically.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
