# optimize-text-mesh-pro

Walks through TextMeshPro problems in Unity: bloated atlases, fuzzy glyphs, CPU spikes on text updates, build size.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 5700 installs · ★ 1149
- Author: Unity-Technologies
- License: LicenseRef-Unknown · policy=link-only · description only; the file stays with the author
- Source: https://github.com/Unity-Technologies/skills/tree/HEAD/skills/optimize-text-mesh-pro/SKILL.md
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/skills/optimize-text-mesh-pro

## What it does

The skill is a triage guide. It asks which symptom you have — memory or atlas bloat, visual quality, CPU load, build size, or alignment in mixed-language text — then points to the matching section: font stacks and dynamic fallbacks, padding against sampling point size, font asset scale, SDF16 atlas mode, AutoSize, worldspace text, font normalization, material presets.

The rules are concrete. Keep the main font static with its glyphs baked, and add dynamic fallbacks through the Fallback list. Any dynamic fallback needs `Clear Dynamic Data On Build` turned on, or glyphs baked while you test in the editor end up in the player. Padding divided by sampling point size has to match across the main font and its fallbacks, since a mismatch shows up as uneven stroke weight on one line. Set font asset Scale to 1 — a value like 0.9 throws off point-size math.

Normalizing mixed Latin and CJK text runs through importing TMP Example & Extras, adding `TMP_TextInfoDebugTool` to the object, and turning on ShowLines to see where baseline drifts. On some project layouts that import loops forever; restarting Unity clears it on the second try. If you ship multilingual builds for iOS and Android, the skill suggests evaluating `Atlas Population Mode = Dynamic OS` from TMP 3.2.0-pre.3, where the source font stays out of the player and Unity looks for a matching one on the device.

## Requirements
- Works with: Unity

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add Unity-Technologies/skills --skill optimize-text-mesh-pro -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/optimize-text-mesh-pro/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/optimize-text-mesh-pro/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add Unity-Technologies/skills --skill optimize-text-mesh-pro -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/optimize-text-mesh-pro/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add Unity-Technologies/skills --skill optimize-text-mesh-pro -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/optimize-text-mesh-pro/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install Unity-Technologies/skills optimize-text-mesh-pro
```

2. **Manually: put the files in place**
- File: `.github/skills/optimize-text-mesh-pro/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add Unity-Technologies/skills --skill optimize-text-mesh-pro -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/Unity-Technologies/skills --path skills/optimize-text-mesh-pro
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/optimize-text-mesh-pro/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add Unity-Technologies/skills --skill optimize-text-mesh-pro -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/Unity-Technologies/skills/tree/HEAD/skills/optimize-text-mesh-pro/SKILL.md

## When to use it
- find out why several large TMP atlases show up in the Memory Profiler
- fix fuzzy edges and uneven glyph weight on a single line
- stop CPU spikes on timers and counters caused by AutoSize
- shrink build size from shipped font files
- align Latin and CJK text on the same line

## Example prompts
- TMP atlases are huge in the Memory Profiler — what should I check first?
- Latin and Chinese text sit on one line and the baselines drift apart. How do I align them?
- My on-screen timer causes CPU spikes. Should I turn AutoSize off?

## Similar
- [orbit-card](https://affpapa.org/en/nevibecode/skills/orbit-card.md) — skill · 10000 installs
- [cad](https://affpapa.org/en/nevibecode/skills/cad.md) — skill · 14000 installs
- [step-parts](https://affpapa.org/en/nevibecode/skills/step-parts.md) — skill · 11200 installs
- [sdf](https://affpapa.org/en/nevibecode/skills/sdf.md) — skill · 10500 installs
- [urdf](https://affpapa.org/en/nevibecode/skills/urdf.md) — skill · 10500 installs
- [hatch-pet](https://affpapa.org/en/nevibecode/skills/hatch-pet.md) — skill · 3300 installs

From the same set: [unity-technologies/skills](https://affpapa.org/en/nevibecode/by/unity-technologies/skills.md) — 31 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
