Quick answer: Add a font asset with the missing glyphs to your main font’s Fallback List. Set both fonts to Dynamic atlas population.
A localized game shows English fine but Japanese/Cyrillic renders as boxes. The Latin font asset lacks those glyphs; no fallback configured.
Create the Fallback Font Asset
- Import a font that covers the needed languages (NotoSansCJK for CJK, NotoSans for Cyrillic+Greek).
- Right-click → Create → TextMeshPro → Font Asset.
- Set Atlas Population mode to Dynamic.
Add to Fallback List
Open the primary font asset. Fallback Font Assets → Add → drag in the new asset. Save.
TMP will now look up missing characters in this fallback when rendering.
Dynamic Atlas
Dynamic mode rasterizes glyphs on-demand at runtime. Without it, only pre-baked glyphs render. Set both primary and fallback to Dynamic for full coverage.
Fallback Order
List is searched top-to-bottom. Put your most-common-language fallback first; reduces lookup misses.
Memory Limits
Dynamic atlases grow as glyphs are rendered. Set Atlas Width/Height (default 1024×1024) appropriately:
- 2048 if many languages.
- Multi-atlas via Atlas Population → Multi Atlas Textures = true.
Verifying
Switch language at runtime. All scripts render correctly. No boxes. Atlas inspector shows added glyphs from fallback.
“Primary + fallbacks + dynamic atlas covers any Unicode without pre-baking the entire range.”
For mobile builds, consider pre-baking common glyphs to avoid runtime rasterization hitches — saves ~5ms per first-rendered glyph.