Шрифты в UI Toolkit (UI Elements)

Я хочу изменить шрифт в моей Unity-игре, использующей UI Toolkit. Версия Untiy: 2022.3.31f1.

Я попробовал установить шрифт через код:

public Font myFont;
private void Start()
{
    element.style.unityFont = myFont;
}

Но шрифт при этом не меняется.

Я также попытался поставить новый шрифт через PanelTextSettings в PanelSettings, но это не дало результата.

И пробовал добавить его через ThemeStyleSheet как свой uss, в котором я определил шрифт для интересующих меня элементов. И это тоже не сработало.

Как я выяснил позже - во всём виновато наследование моего ThemeStyleSheet от default.tss, которое вставало поверх любых моих попыток указать новый шрифт для элементов.

Но удалять наследование default.tss - тоже не вариант, поскольку это удалит вообще все предустановки интерфейса.

Собственно, отсюда следует вопрос - как вообще с этим правильно работать? Неужели для простой замены шрифта нужно полностью прописать стиль каждому элементу вручную? Я пытался найти кем-нибудь перепечатанный default.tss, но ничего не нашёл. Так что, по всей видимости, есть какой-то вменяемый способ переопределить шрифт?


Ответы (1 шт):

Автор решения: Борис Николаев

Что-ж. Я разобрался с проблемой.

Итак, чтобы переопределить шрифт - нужно в uss-файле определять свойство -unity-font-definition. И хотя JetBrains Rider и помечает это свойство как ошибочное, оно как раз и переопределяет шрифт, тогда как свойство -unity-font добавлено просто для введения в заблуждение. Это свойство ничего не делает и не будет вызывать никаких ошибок или предупреждений.

Label {
    -unity-font: url('mysans.ttf');            /* Ничего не делает */
    -unity-font-definition: url('mysans.ttf'); /* Установка шрифта */
    color: white;
}

По всей видимости, при отключении default.tss - я видел работу PanelTextSettings, что странно, конечно, но поскольку я нашёл решение своей проблемы - меня уже не особо интересует, для чего вообще нужен PanelTextSettings.

→ Ссылка