Font Palettes

Define typographic roles for your project and apply them consistently across every text component.

What is a Font Palette?

A Font Palette is a ScriptableObject that defines a set of named typographic roles—think of them as CSS classes for fonts. Instead of setting font size, spacing, and color on every text object individually, you assign a role like Header, Body, or Caption and let the palette control the details.

Each role specifies:

Role Properties

Property Type Description
Role Name string Unique identifier for the role (e.g. "Header", "Body").
TMP Font Asset TMP_FontAsset The TextMeshPro font asset used for this role.
Legacy Font Font (optional) Optional Unity legacy font, for UI Text components.
Font Style FontStyles Normal, Bold, Italic, or Bold Italic.
Font Size float (px) Base font size in pixels.
Character Spacing float Extra spacing between individual characters.
Line Spacing float Vertical spacing between lines of text.
Word Spacing float Extra spacing between words.
Paragraph Spacing float Extra spacing between paragraphs.
Color Color Default text color for this role.

Creating a Palette

There are two ways to create a new palette:

From the Assets menu

  1. In Unity, go to Assets → Create → FontOps → Font Palette.
  2. Name the asset and save it anywhere in your project.

From the FontOps window

  1. Open FontOps and navigate to the My Fonts tab.
  2. Select the Palettes sub-tab.
  3. Click the NEW button in the toolbar.

Editing Roles

Select a palette to open the role editor. The left panel lists every role defined in the palette; the right panel shows the editable properties of the selected role.

FontOps
F
🔍
Aa
MY FONTS
PALETTES
PALETTE
NewFontPalette (Font Palette)
+ NEW IMPORT DUPLICATE EXPORT DELETE
PREVIEW & EDIT
✓ HEADER · 32px · Bold
The quick brown fox jumps over the lazy dog.
✓ SUBHEADER · 24px · Bold
The quick brown fox jumps over the lazy dog.
✓ BODY · 16px · Normal
The quick brown fox jumps over the lazy dog.
✓ CAPTION · 12px · Italic
The quick brown fox jumps over the lazy dog.
✓ BUTTON · 16px · Bold
The quick brown fox jumps over the lazy dog.
+ ADD ROLE
✓ Saved AUTOSAVE
EDITING:
Header ▾
ROLE NAME
Header
FONT ASSET (TMP)
None (TMP_Font Asset)
FONT STYLE
Bold ▾
SIZE32
LETTER SPACING0
TMP RUNTIME SETTINGS
LINE SPACING0
WORD SPACING0
COLOR
SAVE DISCARD DELETE ROLE
1
2
3
1
Toolbar — select the active palette, create new palettes, or import/export/duplicate/delete
2
Preview list — click any role to select it. Each card shows a live text preview with the role's font, size, and style
3
Role editor — edit all properties of the selected role. Changes can be saved manually or with autosave enabled
Click any role card in the preview list to select it for editing. The selected role is highlighted with a blue left border.

Import / Export

Palettes can be shared across projects or with teammates using JSON files.

Font asset references are stored by name. After importing, FontOps will attempt to resolve each font asset by name in your project. Missing fonts are flagged in the role list with a red dot.

Multiple Palettes

You can create as many palettes as you need. Common use cases include:

Switch the active palette at any time using the palette dropdown in the My Fonts → Palettes toolbar. Only one palette is active at a time; the active palette is used by the compliance checker and the Apply to Scene tools.

API Reference

You can query palette data at runtime or in editor scripts through the FontPalette API.

Get a role by name

// Returns the FontRoleEntry matching the given name, or null if not found.
FontRoleEntry role = palette.GetRole("Header");

Get all TMP font assets

// Returns a list of every TMP_FontAsset referenced by the palette's roles.
List<TMP_FontAsset> fonts = palette.GetAllTmpFonts();

Get all legacy fonts

// Returns a list of every legacy Font referenced by the palette's roles.
List<Font> fonts = palette.GetAllLegacyFonts();