Unity3D 工程中,UI 用的是 NGUI。在 3D 程序中,文字绘制并不像 GDI 的字体光栅化那么直接,除了 DirectWrite/Direct2D 这种结合 GDI 的,其他大多都是手工管理 sprite font。一般的字体应用方法,主要是静态和动态两种,区别就在于是读取缓存的贴图还是运行时生成贴图。
我开始是看着网上的教程,用 BMFont 生成了静态贴图——但是由于目标字符集是 Shift-JIS,这个量实在是很大,贴图的量看起来十分吓人。然后我才发现,新版本的 NGUI 是支持使用 TTF 作为源生成动态字体的。不过系统字体都是 TTC,要转换为 TTF。鉴于许多教程中提到的 TTCTools 不能用(这是 16 位应用程序,64 位系统不带 WOW16),于是找到了两种方法:UniteTTC,和 AiFont。我用的是后者,导出了其中一个字形(TTC 可以包含多种字形,比如常规、斜体、粗体、粗斜体、半宽)的 TTF,能正常绘制文字。