# TMPEffects: tag-driven text animation for Unity TextMeshPro

> TMPEffects gives Unity's TextMeshPro a small tag language so a line of dialogue can animate, typewriter in, or hide itself over time, with parameters carried in the tag rather than in code. You can define the animations in C#, in the inspector, or on Unity's Timeline, and the package integrates with YarnSpinner.

**Luca3317/TMPEffects** — Easily animate Unity text and apply other effects with custom tags

- Repository: https://github.com/Luca3317/TMPEffects
- Website: https://luca3317.dev/tmpeffects
- Stars: 800 · Forks: 57
- Language: C#
- License: MIT
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/luca3317-tmpeffects

## Text carries the instruction, not the script

The package's premise is that a line of dialogue in a TextMeshPro component should be able to say how it should be revealed. TMPEffects applies all kinds of effects to TextMeshPro texts using custom tags, and the tags live in the text itself, which means a designer can tune a typewriter speed without recompiling anything and without writing a coroutine per line. The feature list is arranged around what a text effect can do. Animate text blocks continuously, show and hide text over time, animate the show and hide sequence itself, so the effect of a line arriving and leaving can be styled, and raise commands at any given index, which is how an event fires when the animation reaches a particular character. The last two are the ones that turn it from a visual flourish into a scripting tool, because a command raised at an index is a hook your own code can use to advance a dialogue state machine.

## Two components, one for animation and one for the writing

The setup section tells you the shape of the integration. You add the TMPAnimator and/or TMPWriter component to a GameObject with a TextMeshPro(UI) component and select use default database in both their inspectors. You then get a prompt to import the required resources, and hitting the button completes the setup. The naming makes the division of labour clear. The animator handles the visual behaviour of the text, the per-character animation and the show and hide sequence. The writer handles the writing side, the typewriter effect and the commands. They are separate because they answer different questions, and the package lets you take one without the other, which is what the and/or in the instructions means. The default database mentioned in the inspectors is where the built-in animations and commands live, and it is also the extension point for adding your own.

## Parameters come from the tag and are typed for you

The parameter system is the piece that makes the tag language usable rather than decorative. When creating an animation or command from script, adding a parameter to your animation is as easy as decorating it with the AutoParameter attribute, for example:

```csharp
[AutoParameter("ampltiude", "amp"), SerializeField]
private float amplitude;
```

The attribute carries the inspector field name and the tag keyword, so a tag written as <wave amp=12> supplies the value 12 and your animation logic reads it as a normal field. The README notes that TMPEffects supports many types out of the box, float, Vector3 and AnimationCurve among them, and that you can create your own types that are also compatible with the attribute. That last point matters more than it looks, because a typewriter effect and a wave effect want different parameter types, and the attribute keeps the tag to a plain string. Custom keywords can also be defined using keyword databases, which is the mechanism for naming a set of recognised keywords rather than treating everything as free text.

## You can author animations without writing code

Two of the listed features are aimed at people who would rather not write C#. The API to create your own animations, commands and tags is there for programmers, but if you do not like to code you can create animations right in the inspector and/or in Unity's Timeline. The inspector route uses GenericAnimations, and the Timeline route uses Unity's own timeline window, if you have it installed. The README shows a Timeline capture demonstrating it. For a Unity team this is the difference between a text effect that only a programmer can tune and one a designer can adjust per line. It also changes the review workflow, because an animation stored as an asset in the project is reviewable and mergeable in the same way as a prefab, while one hard-coded in a script is not.

## YarnSpinner and Timeline are the integrations to know about

The Integrations section lists the external packages the package is confirmed to work with, and two of them matter for how you will actually use it. Timeline is fully integrated with Unity's Timeline package, providing custom tracks, clips and markers, which is what makes the no-code authoring route possible in the first place. YarnSpinner works out of the box, with one caveat: you have to disable YarnSpinner's built-in typewriter effects, and the README links to the docs page that covers it. There is also a detail worth planning around. You can use variables defined in YarnSpinner scripts as tag parameters, which means a YarnSpinner variable can drive a text effect. The package's own typewriter and YarnSpinner's would otherwise fight over the same characters, which is presumably why one of them has to be turned off. The author invites requests for further integrations through an issue or a pull request.

## Install through OpenUPM, not by cloning

The Quickstart section gives two routes, and one of them has a catch. TMPEffects is available on the OpenUPM registry, and alternatively you can install it through the Unity Package Manager using the git url https://github.com/Luca3317/TMPEffects.git?path=/Package. If you would rather simply clone the repository, you will have to manually import the required resources located under Assets > TMPEffects > Resources. That is the difference between the two paths: the package manager route handles the resources for you, the clone route leaves you to copy them in by hand. The repository layout shows why, with a Package/ directory that holds the Unity package and a separate TMPEffects.Projects~ directory that is excluded from the repository because of the trailing tilde, so your own project files never end up in version control.

## Compatibility is bounded and the README is upfront about it

The Dependencies and compatibility section is short and specific. TMPEffects is compatible with Unity 2021.3 and up, and it is tested in 2021.3, 2022.3 and 2023.2, with the invitation to open an issue if you hit problems on another version at or above 2021.3. The only dependency is Unity's TextMeshPro package, which is automatically included in Unity 2018.3 and up, so in practice there is nothing else to resolve. The README is explicit that the rest of it is a quick overview and that you should refer to the manual at tmpeffects.luca3317.dev for questions, with separate pages for built-in animations, show and hide animations, commands, and their parameters. The licence is MIT with the LICENSE.md file at the root, the repository is not archived, the last push was on 2026-06-05, and there are no GitHub releases, so the version you install comes from the OpenUPM registry rather than from a tag.

## Conclusion

Adopt TMPEffects if you build Unity games with TextMeshPro and want per-character animation, typewriter reveals and timed show and hide sequences driven from the text itself rather than from code. Do not adopt it if your project uses the legacy TextMeshPro text component or a different UI text system, since the package is built around TextMeshPro and its only dependency is Unity's TextMeshPro package. Before you commit, check that you are on Unity 2021.3 or later, install it through the OpenUPM registry rather than by cloning, and read the manual, because the README is explicitly a short overview.

## FAQ

### What is TMPEffects?

It is an MIT licensed Unity package that applies all kinds of effects to TextMeshPro texts using custom tags. It can animate text blocks continuously, show and hide text over time, animate the show and hide sequence, and raise commands and events at a given index.

### How do I install TMPEffects in Unity?

Through the OpenUPM registry, or through the Unity Package Manager with the git url https://github.com/Luca3317/TMPEffects.git?path=/Package. If you clone the repository instead, you must manually import the required resources under Assets > TMPEffects > Resources.

### How do I set up TMPEffects in a scene?

Add the TMPAnimator and/or TMPWriter component to a GameObject that has a TextMeshPro(UI) component, and select use default database in both their inspectors. You will be prompted to import the required resources, and pressing the button finishes the setup.

### What Unity versions does TMPEffects support?

Unity 2021.3 and up, with testing in 2021.3, 2022.3 and 2023.2. The only dependency is Unity's TextMeshPro package, which ships automatically with Unity 2018.3 and later, and it integrates with Unity's Timeline package and with YarnSpinner.

## Sources

- [Issues](https://github.com/Luca3317/TMPEffects/issues)
- [License: MIT](https://github.com/Luca3317/TMPEffects/blob/main/LICENSE)
- [Luca3317/TMPEffects on GitHub](https://github.com/Luca3317/TMPEffects)
- [Project website](https://luca3317.dev/tmpeffects)
- [README](https://github.com/Luca3317/TMPEffects/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/luca3317-tmpeffects
