# Typewriter(TextMeshProUGUI,float,Action,CoroutineInterruptToken)

Method in [Effects](/2.2/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.2/api/csharp/yarn.unity/yarn.unity.effects/yarn.unity.effects.coroutineinterrupttoken.md) stopToken | A [CoroutineInterruptToken](/2.2/api/csharp/yarn.unity/yarn.unity.effects/yarn.unity.effects.coroutineinterrupttoken.md) that can be used to interrupt the coroutine. |


---

# Agent Instructions: 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.2/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.
