-
Notifications
You must be signed in to change notification settings - Fork 78
Font Asset
woctordho edited this page Apr 23, 2024
·
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的那个才支持中文,Regular是普通的字重(粗细),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 Sans字体的简体中文、繁体中文、日文、英文等版本。更换字体时,不但要在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