Skip to content

Font Asset

woctordho edited this page Apr 23, 2024 · 9 revisions

字体

生成font asset

Nova使用了TextMeshPro的font asset。它与“字体(font)文件”不同,包含许多额外的信息。为了避免上万个中文字符占用大量空间,可以只把剧本中出现的字符打包到游戏里。如果剧本使用了新的字符,在游戏中发现缺字的情况,就要重新生成font asset。

  1. 运行Tools/Resources/generate_charsets.py,将剧本中出现的字符统计到Assets/Nova/Fonts/Charset.txt
    • 如果提示Special character,说明剧本中出现了这些特殊字符(Unicode category为C),可能造成各种问题
  2. 在Unity Editor的上面的菜单中,打开Window -> TextMeshPro -> Font Asset Creator
  3. 设置参数:
    • Source Font File:字体文件,默认是NotoSansSC-Regular(有SC的那个才支持中文,Regular是普通的字重(粗细),Bold是粗体,Thin是细体)
    • Atlas Resolution:把字体全部放到一张图片上,那张图片的尺寸,一般的中文剧本可以从4096 * 2048开始尝试
    • Character SetCharacters from File
    • Character FileCharset
  4. 点击Generate Font Atlas
  5. 检查输出的point size是否合适,如果太小(比如小于30),就要增大Atlas Resolution,重新生成
  6. 点击Save,保存生成的font asset,默认是Assets/Nova/Fonts/NotoSansSC-Regular SDF.asset

更换font 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