
注:如果您翻译的游戏如果data.win里面本身已经有支持汉字的字体文件,或者外挂了字体文件(ttf/otf)的,可以跳过这节。
> 字体(font):即字符体型(如书写文体),或称字型,是一个具有同一外观样式(风格,style)和同一排版尺寸(字宽、字高和行间距)的字形的集合。注:从“体”(样式类别)上来说,其是一个类型;从字形上来说,其是一个集合。——[百度百科](https://baike.baidu.com/item/%E5%AD%97%E4%BD%93/5167264#3)
其实更加准确的叫法是typefont,不过这里常指计算机字体,此处不用typefont这称呼。
比如你现在看的这句话,字体可以多种多样,可能是微软雅黑、宋体、文泉驿黑体,这些都算字体,只不过字体文件不同而已。
- **字体文件类型:** 常用且常见的有`.otf`/`.ttf`。当然有其他的类型但这里用不到
- **字体的风格:** 粗体、斜体、黑体、宋体、有无衬线、是否等宽等,这些在自己选取和原英文字体相近的字体时需要考虑。
- **字体的字形大小:** 以原英文字体大小作为参考来调整即可。如果是需要和原英文字体混合的话,可能在大小上会有一点限制,甚至需要寻找替代方案,这里还是具体情况具体分析。
- **字库:** 准确来讲就是这个字体文件包含的字形的多少,比如包含汉字常用字、拉丁字符、西里尔字符等。在找到合适的字体后需要确认字库多少,避免测试过程中出现缺字的问题。 可以用[字符计数器](https://github.com/NightFurySL2001/CJK-character-count)查看以做参考,当然诸如Fontcreator、[Fontforge](https://fontforge.org/en-US/)、[Bits'N'Picas](https://github.com/kreativekorp/bitsnpicas)也是可以的(不过这几个都是跟设计字体相关的hhh)。
- **许可证:** (简单提一嘴但不是特别重要)尽量找开源的或者包含OFL(Open Font License)的字体,当然免费可商用的字体也是可以的。也不是说其他的也不是不能用,如果你不介意授权问题的话。
- GM在工程中生成的字体在生成后会在font文件夹出现成对的`.png`和`.yy`文件,其中`.png`文件包含字形纹理的大图,`.yy`文件包含字体的相关信息,包含字体的大小、每个字形在`.png`文件中出现的位置、宽高、偏移等等。
- UTMT逆向出来的字体,通过使用`ExportAllFonts.csx`导出来的字体文件格式来看,这些字体都是以`.png`和`.csv`成对的方式存在,性质同上文成对的`.png`和`.yy`文件,可以说图差不多,但是作为配置文件的存储字形位置的格式不一样。
- 在此教程中,这两类格式都会用到,导入的方式相差无几,但从生成的方式看会有方法上的区别。
GM中每一个字符代表的“编号”,是Unicode编码的十进制表示,比如“你”的Unicode十六进制编码是`0x4F60`,十进制表示就是`20320`,GM字体文件中所代表编号就是`20320`。
查字符可以参考以下网站,当然您有更好的就用自己在用的就可以了:
[爱查询(字符
[litefeel(字符->编码)](https://www.litefeel.com/tools/unicode.php)
[字统网(字符
假设您已经找到了合适的字体并且安装到了电脑上,这里可以通过两种方法来生成:
- 在[官网](https://gamemaker.io/zh-CN)下载GM,或者通过Steam下载。
- 打开GM,新建一个工程。

- 找到字体文件夹,右键新建font。

- 在字体编辑器调好相关参数。

- 然后添加字库(字体范围),可以从文本文件获取,也可以定义范围,不确定从哪到哪的话直接32-65535,但还是建议从文本文件获取。

- 点击“重新生成”以生成所需的字体格式。
- 最后在工程根目录里面的`fonts`文件夹里就可以找到生成的文件。

- 在[BMFont官网](https://angelcode.com/products/bmfont/)下载BMFont
- 在[itch.io](https://yellowafterlife.itch.io/gamemaker-bmfont)下载BMFontToGMFont
- 参照[Github](https://github.com/YAL-GameMaker-Tools/BMFontToGMFont)的README来调BMFont的必要设置:打开BMFont窗口左上角的`Options -> Export Options`,按照下面的设置来调整:
- `Force offsets to zero`打勾
- `Bit depth`设为32
- ARGB的Channel值分别为Glyph、one × 3
- `Font descriptor`设为Text,`Textures`设为png
- 其他的比如Textures的宽高(2的幂,如1024,2048,4096)、Spacing、Padding等可以按照自己的需求来调整。

- 转到BMFont窗口左上角的`Options->Font settings`,一般只调整框中的几个参数即可:

- 然后是选字:除非您知道BMFont窗口右边的字符集都代表什么且自己知道怎么选,否则还是建议点击BMFont左上角的`Edit -> Select chars from file`从文本文件中获取字库。注意:后者中选择的文本文件的编码格式需要是`UTF-8 with BOM(带BOM的UTF-8)`的,不然会出现不能完全识别字的问题。
- 以上这些设置好之后,点击BMFont左上角的`Options -> Visualize`预览字体纹理,左下角会显示进度,在完成期间不要多次点击BMFont窗口,这样会导致字形纹理渲染强行停止。该步就是调整字体渲染效果的时候了,在看到字体纹理后,如果觉得这不是自己预期的效果的话,请调整`Font settings`中的参数然后反复`Visualize`。在Preview窗口中,你可以点击左上角的Zoom来调整纹理图预览缩放比例。(示例图中使用的字体是[KHドット神楽坂12(OFL)](http://jikasei.me/font/kh-dotfont/))

- 调到自己满意后就可以导出字体纹理了。点击BMFont左上角的`Options -> Save bitmap font as...`,选择导出路径并命名后,点击保存。
- 在导出路径找到`.fnt`文件,另一个文件管理器窗口打开BMFontToGMFont程序的路径,然后将该`.fnt`文件拖到`BmFontToYY23.exe`上以该应用程序打开,稍等片刻后会在`.fnt`文件相同的目录下生成`.png`和`.yy`文件。
以上两种方法都是通过现有的应用程序来生成字体文件,当然通过编程写脚本也可以生成,这点有点花时间想算法,为了省时间还是不展开对此介绍了。
两种方法的区别:
- 通过GM生成字体当然是好的方法,甚至支持SDF,对于通过SDF渲染的字体来提供更好的渲染来说,也不失为一种选择;
- 通过BMFont来生成字体,参数调整方面相对来说更加灵活,而且字形纹理渲染支持更大的图片大小(毕竟可调,限制没那么多),而且BMFont也支持其他引擎的字体生成,比如Unity,可参考[这个](https://www.cnblogs.com/gcczhongduan/p/5284658.html)。
先写这么多。
欢迎在交流群Feedback:718505318(BNP交流群)
238552588(UT同人汉化交流群)