> For the complete documentation index, see [llms.txt](https://docs.yarnspinner.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.yarnspinner.dev/2.1/api/csharp/yarn.unity/yarn.unity.effects/yarn.unity.effects.typewriter.md).

# Typewriter(TextMeshProUGUI,float,Action,CoroutineInterruptToken)

Method in [Effects](/2.1/api/csharp/yarn.unity/yarn.unity.effects.md)

## Summary

A coroutine that gradually reveals the text in a `TextMeshProUGUI` object over time.

```csharp
public static IEnumerator Typewriter(TextMeshProUGUI text, float lettersPerSecond, Action onCharacterTyped, CoroutineInterruptToken stopToken = null)
```

## Remarks

This method works by adjusting the value of the `text` parameter's `TextMeshProUGUI.maxVisibleCharacters` property. This means that word wrapping will not change half-way through the presentation of a word.

{% hint style="info" %}
Depending on the value of `lettersPerSecond`, `onCharacterTyped` may be called multiple times per frame.
{% endhint %}

Due to an internal implementation detail of TextMeshProUGUI, this method will always take at least one frame to execute, regardless of the length of the `text` parameter's text.

## Parameters

| Name                                                                                                                                                | Description                                                                                                                                                           |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TextMeshProUGUI` text                                                                                                                              | A TextMeshProUGUI object to reveal the text of.                                                                                                                       |
| `float` lettersPerSecond                                                                                                                            | The number of letters that should be revealed per second.                                                                                                             |
| `Action` onCharacterTyped                                                                                                                           | An `Action` that should be called for each character that was revealed.                                                                                               |
| [Yarn.Unity.Effects.CoroutineInterruptToken](/2.1/api/csharp/yarn.unity/yarn.unity.effects/yarn.unity.effects.coroutineinterrupttoken.md) stopToken | A [CoroutineInterruptToken](/2.1/api/csharp/yarn.unity/yarn.unity.effects/yarn.unity.effects.coroutineinterrupttoken.md) that can be used to interrupt the coroutine. |


---

# 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:

```
GET https://docs.yarnspinner.dev/2.1/api/csharp/yarn.unity/yarn.unity.effects/yarn.unity.effects.typewriter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
