自定义字体
游戏基于多语言或者统一 UI 设计的角度出发,要求能够更改 LEVEL INFINITE PASS 的字体为游戏字体,这里介绍设置方法。
字体
- Unity
- Unreal Engine
Unity 默认不提供字体资源文件,在打开 LI PASS 界面前调用 SetPriorityFont
接口更换字体。如果未特别指定,默认使用 Unity Arial 字体。
Unity 使用的 Arial 字体在 iOS 上无法正常显示泰语,详见 Unity Issue Tracker 上的相关主题。
如果需要显示泰语,建议使用其他专门的泰语字体资源。有关配置的更多详情,请参见 多语言字体。
Unreal Engine 字体资源说明
Unreal Engine 字体文件分为 字体资源(Font) 和 字体样式资源(Font Face)。更多信息请参考 UE 官方文档。
其中字体资源文件较小,被 UMG 蓝图引用。如图中的 Lato.uasset
。
字体样式资源文件较大,保存字体数据,被字体资源引用。同一个字体样式资源可在多个字体资源之间重复使用。如下图中被字体资源 Lato.uasset
使用的字体样式资源 Lato-Bold.uasset
。
字体引用关系可通过引擎引用工具查看。
手动替换 Unreal Engine 字体
准备工作
准备需要替换的字体资源(font)放入工程中的字体目录。以 Stainless 字体资源为例,打开编辑器编译出 Stainless.uasset
文件。
在文件夹中备份 Stainless 字体资源文件(Stainless.uasset
) ,记录字体存放位置,然后删除 Stainless 字体资源文件。
备份的字体资源文件,将用于替换字体。
在文件夹中手动备份并删除字体,字体资源引用不会改变。建议不要在编辑器中强制删除字体资源,会导致字体引用变动,有可能替换字体失败。
修改 LI PASS 字体资源文件
在编辑器中找到 LI PASS 使用的 Lato 字体资源文件。
在编辑器中将 Lato 字体资源重命名为需要替换的字体(font)名,通过引用查看工具查看引用关系。
例如:修改命名 Lato 为 Stainless 后。在编辑器中将改名后的 Lato 字体(即现在的 Stainless 字体)移动到需要替换的字体(font)原来的存放位置,此时编辑器会有复制或移动的提示,选择移动。
例如:移动改名后的 Stainless 字体(原来的 Lato)到删除的游戏字体 Stainless 原来的位置(即上一步删除并记录的位置)。通过引用查看工具查看引用关系。
修改命名并移动原有 Lato 字体,使 LI PASS 字体引用关系发生变化,指向需要替换的 Stainless 字体原来的位置。
替换 LI PASS 字体资源文件
关闭编辑器,在文件夹中使用之前备份好的字体资源文件(Stainless.uasset
)覆盖现有的 LI PASS 字体资源()Stainless.uasset
)文件。
在文件夹中操作字体资源文件覆盖,字体资源的引用不会改变,建议关闭编辑器后操作,避免因文件引用导致替换失败。
检查 LI PASS 字体引用
打开编辑器,使用引用查看工具检查 LI PASS 的 UMG 蓝图中的字体引用已变成预期的新字体资源文件。
LI PASS 所使用的字体已被完全替换,您可从编辑器查看界面文字的变化。
脚本替换 Unreal Engine 字体
需要依赖 Python 脚本,脚本工具在 INTLSample UE 工程中。
准备工作
准备需要替换的字体资源(font)放入工程中的字体目录。以 Stainless 字体资源为例,打开编辑器编译出 Stainless.uasset
文件。
修改脚本配置
修改工程目录中
Tools/Config.py
文件配置:GAME_FONT_FILE_PATH:需要替换的字体资源文件路径。
ENGINE_PATH:引擎安装路径。修改工程目录中
Tools/RenameLIFont.py
文件配置:GAME_FONT_ASSET_PATH:游戏使用的字体资源路径,示例:/Game/Assets/UI/Font/Stainless.Stainless
关闭编辑器,执行脚本命令:
在 Tools 工作目录下执行命令:
python .\LITools.py -t ReplaceLIFont -unreal 4.21
其中 -unreal 后跟的参数为游戏开发使用的 Unreal 版本。
LI PASS 所使用的字体已被完全替换,您可从编辑器查看界面文字的变化。
验收
在编辑器或实体设备上运行游戏,验证字体是否已如预期更改。
例如,默认字体 Lato 已更新为 Tencent Sans。
Lato:
Tencent Sans:
多语⾔字体
- Unity
- Unreal Engine
为解决不同字符编码中字体无法正确显示的问题,在 FontName 字段中为导入的字体添加默认字体。
FontNames 格式:FontName1,FontName2,FontName3
更多信息,请参见 Font assets。
当 Unity 尝试使用动态字体渲染文本但无法找到字体时(因为未选择 Include Font Data,并且用户计算机上未安装该字体),或者字体不包含请求的字形时(例如尝试使用拉丁字体在东亚脚本中渲染文本时,或者使用粗体/斜体字形文本时),它将尝试 Font Names 字段中列出的每种字体,从而查看是否可以找到与项目中的字体名称匹配的字体(包含字体数据)或者用户计算机上安装的字体是否具有请求的字形。如果找不到列出的后备字体或者这些字体不具有所请求的字形,Unity 将回退到硬编码的全局后备字体列表,其中包含当前运行时平台上通常安装的各种国际字体。
—— Unity Documentation
为解决不同字符编码中字体无法正确显示的问题,需要配置字体资源来包含不同字符的不同字体系列。
目前,LI PASS 默认字体 Lato 及后提供的 NotoSans,都存在单⼀字体⽆法适用于所有语⾔的问题。因此,有必要配合不同编码的字体与默认字体一并使用,确保各个语⾔都能正常显示。
配置一款复合字体,以 Lato 作为默认字体系列,并额外包含简体中文、日文、韩文、繁体中文 CJK 和泰文的字体系列。另将 NotoSans 配置为后备字体,用于显示各种其他语⾔,例如⼤部分字体都不⽀持的印地语。
优化默认字体
LI PASS 默认字体资源因涉及多语言,如需优化,可删除非必要的字体资源文件,参考如下:
文件名称 | 说明 | 备注 |
---|---|---|
HuakangRoundBodyW5.uasset | LI PASS V1.14.00 已删除 | 可删除 |
HuakangRoundBodyW5_Font.uasset | LI PASS V1.14.00 已删除 | 可删除 |
Lato.uasset | LI PASS 默认字体资源 | 不可删除 |
Lato-Bold.uasset | LI PASS 默认字体样式 | 不可删除 |
NotoSansArabic-Regular.uasset | LI PASS 使用的阿拉伯文字体样式 | 不建议删除 不支持阿拉伯文时可删除 |
NotoSans-Bold.uasset | LI PASS 默认后备字体样式 | 不可删除 |
NotoSansJP-Bold.uasset | 日文字体样式,LI PASS V1.14.00 已删除 | 可删除 |
NotoSansJP-Regular.uasset | LI PASS 使用的日文字体样式 | 不建议删除 不支持日文时可删除 |
NotoSansKR-Bold.uasset | 韩文字体样式,LI PASS V1.14.00 已删除 | 可删除 |
NotoSansKR-Regular.uasset | LI PASS 使用的韩文字体样式 | 不建议删除 不支持韩文时可删除 |
NotoSansSC-Bold.uasset | 中文字体样式,LI PASS V1.14.00 已删除 | 可删除 |
NotoSansSC-Regular.uasset | LI PASS 使用的中文字体样式 | 不建议删除 不支持中文时可删除 |
NotoSansTC-Bold.uasset | 繁体中文字体样式,LI PASS V1.14.00 已删除 | 可删除 |
NotoSansTC-Regular.uasset | 繁体中文字体样式,LI PASS V1.14.00 已删除 | 可删除 |
NotoSansThai-Regular.uasset | LI PASS 使用的泰文字体样式 | 不建议删除 不支持泰文时可删除 |
多语⾔字体验收
在编辑器或实体设备上运行游戏,验证字体是否已如预期更改。
如果游戏只使用一种字体,可直接在两种语言之间切换,测试 UI 界面的多语言适配。
如果游戏为不同语言配置了不同的字体,建议在使用不同字体的语言之间切换,以进行验收测试。
例如,英文和中文使用字体A,而泰文则使用了字体B。验收测试时可在英文(字体A)与泰文(字体B)间切换确认效果。
以下为同一字体适配于中英文的例子:
英文:
中文: