У меня есть группа горизонтальной разметки кнопок с TextMeshPro. Как я могу рассчитать шрифт автоматического изменения размера для него и установить минимальное значение для всех кнопок? Это нужно для относительного UI.
У меня сейчас:
И как я хочу:
Я попробовал этот код:
public class FontSizeController: MonoBehaviour
{
private void Start()
{
SetMinFontForAnswers(transform,
FindMinFontSizeAnswerOptions(transform));
}
private void SetMinFontForAnswers(Transform answerPanel, float minFontSize)
{
for (var answerIndex = 0; answerIndex < answerPanel.childCount; answerIndex++)
{
var meshProUgui = answerPanel.GetChild(answerIndex).GetChild(1).GetComponent<TextMeshProUGUI>();
meshProUgui.fontSize = minFontSize;
}
}
private float FindMinFontSizeAnswerOptions(Transform answerOptions)
{
var minFontSize = -1f;
for (var answerIndex = 0; answerIndex < answerOptions.childCount; answerIndex++)
{
var component = answerOptions.GetChild(answerIndex).GetChild(1).GetComponent<TextMeshProUGUI>();
component.enableAutoSizing = true;
component.ForceMeshUpdate();
if (IsAnswerOptionActive(answerOptions, answerIndex) && IsMinFontSizeOrNotInitialized(component, minFontSize))
{
minFontSize = component.fontSize;
}
component.enableAutoSizing = false;
}
return minFontSize;
}
private bool IsAnswerOptionActive(Transform answerOptions, int answerIndex)
{
return answerOptions.GetChild(answerIndex).gameObject.activeSelf;
}
private bool IsMinFontSizeOrNotInitialized(TMP_Text textComponent, float minFontSize)
{
return textComponent.fontSize < minFontSize || minFontSize == -1f;
}
}
Но он не работает при запуске и работает только в методе обновления. Но когда я использовал его в методе Update, я вижу, когда меняется размер шрифта текста. Это быстро, но я хочу сделать это до того, как панель будет отображаться.
Панель вопросов не активна по умолчанию
AnswerOptionsPanel:
TextMeshPro Текст в AnswerOptionsPanel: