TGViewer
SpellSinger - разработчик игр на Unity SpellSinger - разработчик игр на Unity @spellsingergames · 548 subscribers
Post #110 694
TextMesh Pro и Addressables. Шрифты

Есть проблема: TMP не особо дружит с Addressables. TMP предполагает, что шрифты хранятся в ресурсах и сделать их асинхронную загрузку не тривиально. Есть подробный пост в обсуждениях Unity, где расписаны все проблемы.

В этом же посте предлагается ряд решений, в моем случае почти все не сработали, но я расскажу что сработало:

1) В билд добавляем только одну пустую сцену, все остальные сцены загружаем через Addressables. В этой пустой сцене не должно быть ссылок на шрифты.
2) Шрифты не складываем в Resources, кладём куда-нибудь в другое место, и выносим в отдельный Asset Group, чтобы они не дублировались.
3) Разбираемся с TMP Settings. В нем есть ссылка на шрифт по умолчанию. Её нужно удалять на время билда, чтобы шрифт не попал в основной билд. Можно делать это вручную, но я сделал это автоматическим скриптом:

    public class TmpSettingsCleaner : IPreprocessBuildWithReport
{
private static TMP_Settings tmpSettings;
private static FieldInfo defaultFontField;
private static object defaultFont;

public int callbackOrder => 0;

public void OnPreprocessBuild(BuildReport report)
{
tmpSettings = Resources.Load<TMP_Settings>("TMP Settings");
defaultFontField = tmpSettings.GetType()
.GetField("m_defaultFontAsset", BindingFlags.Instance | BindingFlags.NonPublic);
defaultFont = defaultFontField!.GetValue(tmpSettings);
Debug.Log($"Default TMP font was {defaultFont}, now it is null");
defaultFontField.SetValue(tmpSettings, null);
}

[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
{
defaultFontField.SetValue(tmpSettings, defaultFont);
Debug.Log($"Restored default font {defaultFont}");
}
}

Готово.

Бонус для тех, кто дочитал до сюда:
В TMP есть два варианта создания атласа: статический и динамический. Я считаю, что для веб игр однозначно выигрывает динамический вариант, потому что он сильно уменьшает размер билда. Плюс, если в игре есть лидерборды, то для статического варианта нужно будет сразу добавлять в атлас все возможные символы, так как в именах игроков могут встретиться любые символы. И атлас получается огромный, особенно если шрифт поддерживает несколько языков.

#ui #textmeshpro #addressables
  • 👍 6
  • 🔥 2
More from @spellsingergames
  1. Oct 1, 2026Автор
  2. Aug 31, 2026Post #235
  3. Aug 25, 2026Прошли модерацию на Crazy Games. Basic Launch продлится до 15 сентября или пока не наберет…
  4. Aug 24, 2026А мы, тем временем, идём покорять #crazy_games Вчера ночью отправили билд на модерацию. Мо…
  5. Aug 24, 20262 недели нужно рекоммендеру Яндекс игр, чтобы как-то отреагировать на изменения метрик. AR…
  6. Aug 14, 2026Шестой эпизод подкаста ГЕЙМДЕВ ПОД ПИВОМ уже во вторник, в 22:30МСК! Хорошенечко отоспитес…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →