GMS游戏汉化教程(2——自制字体)
AX暗星233
编辑于 2025年09月16日 18:55
收录于文集
共6篇

注:如果您翻译的游戏如果data.win里面本身已经有支持汉字的字体文件,或者外挂了字体文件(ttf/otf)的,可以跳过这节。

# 引入:关于自制字体你需要知道的东西

## 1. 什么是字体

> 字体(font):即字符体型(如书写文体),或称字型,是一个具有同一外观样式(风格,style)和同一排版尺寸(字宽、字高和行间距)的字形的集合。注:从“体”(样式类别)上来说,其是一个类型;从字形上来说,其是一个集合。——[百度百科](https://baike.baidu.com/item/%E5%AD%97%E4%BD%93/5167264#3)

其实更加准确的叫法是typefont,不过这里常指计算机字体,此处不用typefont这称呼。

比如你现在看的这句话,字体可以多种多样,可能是微软雅黑、宋体、文泉驿黑体,这些都算字体,只不过字体文件不同而已。

## 2. 你需要知道的字体参数

  • - **字体文件类型:** 常用且常见的有`.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)的字体,当然免费可商用的字体也是可以的。也不是说其他的也不是不能用,如果你不介意授权问题的话。

## 3. GM中的字体

  • - GM在工程中生成的字体在生成后会在font文件夹出现成对的`.png``.yy`文件,其中`.png`文件包含字形纹理的大图,`.yy`文件包含字体的相关信息,包含字体的大小、每个字形在`.png`文件中出现的位置、宽高、偏移等等。

  • - UTMT逆向出来的字体,通过使用`ExportAllFonts.csx`导出来的字体文件格式来看,这些字体都是以`.png``.csv`成对的方式存在,性质同上文成对的`.png``.yy`文件,可以说图差不多,但是作为配置文件的存储字形位置的格式不一样。

  • - 在此教程中,这两类格式都会用到,导入的方式相差无几,但从生成的方式看会有方法上的区别。

## 4. GM字体格式的小补充

GM中每一个字符代表的“编号”,是Unicode编码的十进制表示,比如“”的Unicode十六进制编码是`0x4F60`,十进制表示就是`20320`,GM字体文件中所代表编号就是`20320`

查字符可以参考以下网站,当然您有更好的就用自己在用的就可以了:

[爱查询(字符

[litefeel(字符->编码)](https://www.litefeel.com/tools/unicode.php)

[字统网(字符

# 如何自制字体

假设您已经找到了合适的字体并且安装到了电脑上,这里可以通过两种方法来生成:

## 1. 通过GM引擎本身生成`.png``.yy`文件

  • - 在[官网](https://gamemaker.io/zh-CN)下载GM,或者通过Steam下载。

  • - 打开GM,新建一个工程。

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

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

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

  • - 点击“重新生成”以生成所需的字体格式。

  • - 最后在工程根目录里面的`fonts`文件夹里就可以找到生成的文件。

## 2.通过BMFont和BMFontToGMFont将`.png``.fnt`文件转成`.png``.yy`文件

  • - 在[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同人汉化交流群)