NGUI dynamic font + Sci Fi Fonts (http://www.dafont.com/) и будет счастье. Зачем делать лишнюю работу? Я бы не стал использовать битмаповые шрифты по понятным причинам.
При использовании растровых шрифтов в Unity3d текстура каждого глифа накладывается на отдельный квад (четырёхугольник, полигон). При таком раскладе дел нет никаких трудностей настраивать межбуквенный просвет. В уроке это наглядно показано и описано.
Признаться, я совсем не понимаю, куда вы клоните. В настройках Custom Font есть параметр кернига точно такой же, как и в настройках шрифтов TTF. Но даже если бы и не было, разве это повод отказываться от всех преимуществ растровых шрифтов?
Интересная статья!
Я давно откладываю создание автоматического парсера растровых шрифтов из .fnt (Насколько мне известно, это не официальный, но общепринятый формат описания разметки растровых шрифтов и свойств каждой буквы такого шрифта, как расстояние до идущего следующим символа и прочее). Он представляет растровый шрифт как обычный текстурный атлас, но с доп. параметрами. На windows часто используется программа Bitmap Font для создания таких шрифтов и, соответственно, файла описания .fnt
Мне кажется такой инструмент достаточно востребован и полезен, странно что нет стандартной функции парсинга текстуры из .fnt
Как я понял, в вашем случае разметка и свойства текста все таки забивается вручную?
Custom Font предлагает настроить такие параметры как кернинг, межстрочный интервал, межзнаковый интервал (наравне с кернингом?), character padding (непонятно, влияет ли он на что-нибудь), ширину символа и непосредственно координаты для маппинга. Последние два задаются вручную для каждого глифа. То есть, при создании шрифта я действительно забиваю все эти параметры вручную. После того, как всё настроено, шрифт готов и не требуется больше никаких изменений. Согласен с вами, было бы очень удобно автоматизировать этот муторный процесс.
Помимо этих настроек есть еще несколько в компоненте Text Mesh, которые отвечают уже за разметку текста: text anchor, alignment, padding и пр. Этот компонент работает как с растровыми шрифтами, созданными инструментом Custom Font, так и с truetype. Нативная поддержка сторонних растровых шрифтов отсутствует.
Вот как раз .fnt формат содержит всю необходимую информацию для создания Custom Font в Unity3D, там даже с избытком (есть параметры типа XAdvance, которых нет в Unity3D)
Даже если просто сделать парсер из .fnt (там обчно XML формат, или простой текстовый с переносом строк), уже будет серьезный «прорыв» :)
Одним из огромных преимуществ TextMesh является то, что (насколько я знаю) сколько бы ни было в нем текста, тратится ровно 1 Draw Call на весь Text Mesh
В общем Вы меня вдохновили, займусь этим в ближайшее время! :)
Кстати насчет растровых шрифтов — я не нашел адекватного способа создавать сами шрифты в Windows. На MacOS есть замечательная программа Glyph Designer, где есть такие настройки как обводка, тени (практически полная аналогия со стилями слоев в Photoshop). На Windows я нашел только Bitmap Font, но там нет таких навороченных плюшек. Однако он может брать готовые картинки отдельных символов и паковать их в атлас шрифта со всем необходимым описанием. Но вот этот процесс закидывания отдельных картинок там тоже муторный и совсем не автоматизирован.
Может вам встречались программы для создания шрифтов с описанием?
Или вы счастливый обладатель мака? :)
Я только что нашёл удобный инструмент, который очень серьёзно автоматизирует действия по созданию Custom Font! Не знаком с Glyph Designer, но эта утилита вроде бы делает всё тоже весьма неплохо. Ссылка на Unity Asset Store, ссылка на видеообзор.
В общем-то, мой урок после такой находки можно смело не читать.
Рекомендую обратить внимание на NGUI (в котором есть поддержка AngelCode bitmap font) и Glyph Designer, который этот bitmap font делает наиболее качественно. В качестве альтернативы (для Windows, Linux, Mac) можно попробовать Hiero
Насчет TTF шрифов — слишком круто, часто нужно просто добавить тени, обводку и прочие рюшечки.
Но посмотреть на FontCreator для ликбеза стоит, спасибо за совет.
Все перечисленные рюшечки с небольшими настройками прекрасно делаются в рантайме в ngui, без необходимости перерисовывать контент в виде шрифта или держать его копию с эффектами в памяти.
Я так и не смог разобраться с этим вопросом. На ум приходили только абсолютно сумасшедшие варианты, как то мапить русские буквы с английских, которые находятся с ними на одной клавише (L-Д, R-K, Z-Я и etc.).
Custom font в Unity3d