- PVSM.RU - https://www.pvsm.ru -

Как на всю жизнь сделать удобные текстовые контейнеры в Unity

Когда вы начинаете делать UI и/или работать с текстом, вы почти сразу сталкиваетесь с проблемой: а как непосредственно задавать формат этого текста, куда подставлять данные, как прокидывать форматирование и что делать с датами. Решение простое.

Берете язык из String.Format [1] и жените его с Unity Inspector.

Класс обертка над текстом. ValueContainer - это базовый класс с методом задания значения

Класс обертка над текстом. ValueContainer - это базовый класс с методом задания значения
Структура для удобного создания форматируемого текста

Структура для удобного создания форматируемого текста
Как это выглядит в инспекторе

Как это выглядит в инспекторе

Как использовать:

var fpsText = new PreFormatText("-", fps, netFps, lag); _fps.UpdateValueWithoutNotify(fpsText);

Строите строку, где указываете fallback значение и далее передаете сколько угодно параметров.

Пример строки на выходе и комментарий:

FPS: 30 // переменная fps с форматированием 0
NetFPS: 28 // переменная netFps с форматированием 0
Lag: 0.12​ // переменна lag с форматированием 0.00

Плюсы подхода:

  • гибкость определения формата текста

  • не нужно ничего перекомпилировать

  • можно загонять форматы во внешние ресурсы

Минусы подхода:

  • из кода нет валидации параметров

P.S. Я бы порекомендовал выносить всю параметризацию вьюх в инспектор или конфиги. Не держите ничего из этого в коде. Наступит момент, когда придут правки или нужно будет вылизывать анимации до идеала с дизайнером. И он захочет тягать крутилки, кривые и играться с цветом. В этот момент вы поймете, насколько важно иметь прослойку

Автор: Reptiling

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ui/441787

Ссылки в тексте:

[1] String.Format: https://learn.microsoft.com/en-us/dotnet/api/system.string.format?view=net-10.0

[2] Источник: https://habr.com/ru/articles/984944/?utm_source=habrahabr&utm_medium=rss&utm_campaign=984944