-
Notifications
You must be signed in to change notification settings - Fork 89
Font Asset
woctordho edited this page Feb 19, 2022
·
9 revisions
Nova使用了TextMeshPro的font asset。它与“字体(font)文件”不同,包含许多额外的信息。为了避免上万个中文字符占用大量空间,可以只把剧本中出现的字符打包到游戏里。如果剧本使用了新的字符,在游戏中发现缺字的情况,就要重新生成font asset。
- 运行
Tools/Resources/generate_charsets.py,将剧本中出现的字符统计到Assets/Nova/Fonts/Charset.txt中- 如果提示
Special character,说明剧本中出现了这些特殊字符(Unicode category为C),可能造成各种问题
- 如果提示
- 在Unity Editor的上面的菜单中,打开
Window -> TextMeshPro -> Font Asset Creator - 设置参数:
-
Source Font File:字体文件,默认是NotoSansSC-Regular(有SC的那个才支持中文,Bold是粗体,Thin是细体) -
Atlas Resolution:把字体全部放到一张图片上,那张图片的尺寸,一般的中文剧本可以从4096 * 2048开始尝试 -
Character Set:Characters from File -
Character File:Charset
-
- 点击
Generate Font Atlas - 检查输出的point size是否合适,如果太小(比如小于30),就要增大
Atlas Resolution,重新生成 - 点击
Save,保存生成的font asset,默认是Assets/Nova/Fonts/NotoSansSC-Regular SDF.asset
如果游戏支持多种语言,可以给每种语言设置不同的字体,比如Noto字体的简体中文、繁体中文、日文、英文等版本。更换字体时,不但要在DialogueEntry.prefab等地方设置,还要在主场景里的UI game object上的I18nFontConfig component里设置。如果你的游戏不需要多种语言,可以删掉不相关的语言。
字体描边等效果可以用不同的material来实现,比如dialogue_box.lua中写了text_material = 'outline',而I18nFontConfig中每种字体的materials里也设置了outline和对应的material。如果你不需要描边等效果,也可以删掉这些material。
要给自己生成的font asset创建新的material,可以在Project中找到font asset,打开图标上的小三角,在里面有一个material,选中它,点Inspector右上的齿轮图标,选择Create Material Preset。
TODO:目前I18nFontConfig只支持TextProxy,不支持Unity原版的Text,而且所有TextProxy使用一个相同的I18nFontConfig