I've found a solution for getting custom fonts to appear in the font dropdown. This has been driving me insane for almost a year now so I'm posting this here in case it helps others, especially on Windows 11.
Problem
When adding a custom .ttf or .otf font, it doesn’t show up in Unite’s dropdown list under UI settings. The font appears in Windows/fonts but not in the list, also the list has odd names for fonts.
Cause
Unite gets its font list using this call in FontManager.cs:
Font.GetPathsToOSFonts();
This retrieves a list of system font file paths, not the internal font names. It then parses the filenames to populate the dropdown.
This causes two problems:
- Fonts installed for the current user only (common on Windows 11) are not included in GetPathsToOSFonts(), so they're invisible to Unite.
- The dropdown list is based on the font file's filename, not its internal family name, which may not match what you'd expect.
Fix
You need to ensure your font is installed for all users so it ends up in C:\Windows\Fonts instead of your user font directory - when you look at windows/fonts the font file will appear listed but it isn't stored there.
Steps:
- Open File Explorer as Administrator (use task manager to start explorer.exe as admin).
- Go to: C:\Users\<YourUsername>\AppData\Local\Microsoft\Windows\Fonts
- Locate your font file (e.g. RETRO-PIXEL-THICK.TTF).
- Right-click it → "Show more options" → "Install for all users".
- Restart Unity and/or your machine.
After this, the font should appear in the dropdowns.
Notes
- Fonts with unusual filenames or encoding may still not parse correctly.
- Renaming the file to a simple ASCII name may help in some cases.
- Unite currently does not use Font.GetOSInstalledFontNames() or read internal font metadata.
Hope this helps someone else avoid the hours I spent trying to debug this. Some feedback for the devs:
- Use Font.GetOSInstalledFontNames() for more accurate internal font names (I tested this and it works thanks Baz for the direction)
- Or expose a direct SDF font loader that bypasses OS indexing altogether - it feels counter intuitive to use Text Mesh Pro but then bypass it to get font names that then exclude installed fonts because Unite has a limited font list
Created at
Thank you for sharing this solution!