Как делать шрифты для TextMeshPro
TextMeshPro уже давно часть Unity и его можно бесплатно установить через пакетный менеджер. Не буду описывать все преимущества перед старым текстовым компонентом, это примерно как, сравнивать Блокнот и Word.
Шрифт который используется по-умолчанию поддерживает основные символы, но он обычный/скучный/дефолтный, примерно как китовый объектив у фотоаппарата :) Чтобы добавить в свою игру новый красивый/необычный/яркий шрифт, надо проделать все пару операций.
TMP Font Creator
TMP Font Creator

Итак, что необходимо:
- Сам шрифт TTF (OTF), не забывайте про лицензию ☝️
- Unity с установленным TMP
- Набор символов или unicode range, который будете использовать
- Надо понимать, что во многих шрифтах может не быть необходимых символов
- У Google есть бесплатные Noto Fonts которые тоже немного скучные, но поддерживают все языки :)
- Добавляете файл шрифта в проект, открываете TMP Font Asset Creator и перетаскиваете его в поле Source Font File
- Теперь можно выбрать набор символов, для этого есть меню Character Set:
Select character set type for TMP
Select character set type for TMP

- Выберем Unicode Range (HEX) и укажем, например 0020-007F — это базовые латинские символы, ренжи можно указывать через запятую
- Теперь можно нажать Generate Font Asset
Окно после настроек и генерации шрифта, должно выглядеть как-то так:
Complete font generation for TMP
Complete font generation for TMP

- Из указанного ренжа было добавлено 95 из 96 символов, не добавился 007F — ␡, его нет в этом шрифте.
- В результате, для атласа 512×512 получился Point Size = 69, потому что в настройках было указано Auto Sizing.
- Можно указать размер шрифта вручную, но тогда надо следить чтобы все влезли в атлас и при необходимости увеличить размер атласа.
- Также, можно разбить свои шрифты на несколько ассетов, например, сделать один (базовый) с часто используемыми символами, второй с математическими знаками, третий с армянским языком. И при необходимости TMP сам будет использовать нужный атлас. Для этого к базовому ассету нужно добавить поддержку остальных:
TMP fallback view
TMP fallback view

Как сделать поддержку Emoji в Unity, я уже писал. Ещё недавно на форуме один товарищ опубликовал свое решение проблемы с модификаторами в эмоджи. Напомню, что до сих не работают модификаторы, т. е. если вы сделаете атлас с эмоджи, то всякие флаги, цвет кожи и т. п. будут отображаться некорректно. Автор TMP обещал всё это допилить к версии 2019.3, но пока этого нет. Вариант с форума работает правильно.
Разные unicode ranges для создания своих шрифтов можно подглядеть тут.