UG4L9-2——字体的处理

本章代码关键字

1
2
3
4
5
UIConfig.defaultFont                        //设置默认字体,如果字体文件在Resources根目录下或者子目录Fonts下则直接传入字体名,否则传入路径
DynamicFont //FairyGUI注册所用的字体类,实例化时需要传入字体名和Font对象
FontManager.RegisterFont() //注册动态字体,之后就可以正常显示字体了
FontManager.GetFont().customBold //如果在FairyGUI设置的字体加粗但在Unity不带加粗,可以手动设置
FontManager.GetFont().customBoldAndItalic //若在Unity内斜体和粗体不能同时使用,如果已经设置了customBoldAndItalic就不用设置customBold

FairyGUI支持的字体

  1. 系统字体 (不建议使用)

    可能存在的问题:

    • 如果使用系统字体,在别人的电脑或者设备上不见得存在同样的字体,可能效果和预期不一致
    • 编辑器和游戏引擎可能无法识别部分字体的名字
  2. TTF字体 (最常用)

    将后缀为 **ttf/ttc/otf ** 的字体文件拖入到编辑器资源中,直接使用他们

    如果要在项目设置的快捷菜单里添加字体,字体名称需要为这种格式:ui://包名/(字体的路径)

    image

    需要注意:发布后,字体文件不会被发布,我们需要自己手动将字体文件放置到引擎中,然后建立字体映射
    Unity中将字体放置在Resources或者Resources/Fonts目录下,就不需要额外代码进行注册了
    如果不是这个路径需要用代码进行注册处理,TTF字体设置相关

  3. 位图字体 (特殊需求时使用)

    位图字体就是使用图片来表示某个文字

    • 点击创建位图字体

      image

    • 拖入对应图片

      image

      • 图片:对应资源库中的一张图片
      • 字符:该图片对应的字符
      • 偏移XY:在水平和垂直方向上字符的偏移
      • 占位:如果为0使用图片的宽度,如果不为0使用这里填写的值作为水平占位宽度
      • 字体大小:位图字体的字号,勾选动态改变字号后生效
      • 默认占位:统一设置所有字符的默认占位宽度
      • 允许动态改变字号:勾选后,字体大小使图片可以缩放,
        如果不设置时钟显示图片原本大小,不会缩放
      • 允许动态改变颜色:勾选后可以改变颜色,
        不勾选始终使用图片颜色
    • 也支持类似NGUI中使用第三方位图字体制作工具
      可以使用BMFont生成的文件,格式只支持fnt文件 生成后,编辑器导入素材,选择fnt文件即可

TTF字体设置相关

双击字体文件弹出窗口

​​image​​

  • 系列:字体名称,只读

  • 采样字体大小:渲染方式为SDFAA才有意义,
    其它方式使用默认值16即可

  • 渲染方式:

    image

    • Smooth:抗锯齿,建议使用
    • Hinted Smooth:比Smooth更清晰,速度较慢,较小字体建议使用
    • Hinted Raster:光栅化渲染方式,清晰度最高,但速度更慢
    • SDFAA:使用SDF技术渲染字体,TextMeshPro时可使用
  • AtlasPadding:图集间距,几乎不用修改

  • 斜体样式:SDFAA时才有,使用斜体时的倾斜角度15~60

  • 粗体分量:SDFAA时才有,使用粗体时,粗体的重量,-3~3

  • 关于TextMeshPro的支持 只需要在设置中将字体的渲染方式设置为SDFAA即可 只要Unity中导入了TextMeshPro插件,之后就能正常显示

使用TTF字体的注意事项

  1. 需要自己导入字体文件到工程中,建议直接放入Resources目录或其Fonts子目录下,FGUI会自动帮助我们进行字体注册

    image

  2. 注意!对于在FairyGUI里设置的默认字体并使用的文本,我们需要在UIConfig里自己手动设置!否则无法正常显示

    image

    我们也可以在代码内设置默认字体,这一步需要在显示面板之前完成

    如果字体放在Resources目录或其Fonts子目录下,就可以直接填入字体名字而无需路径

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //需要在显示面板前设置好!
    UIConfig.defaultFont = "STHUPO"; //如果放在指定文件夹下了,直接填写字体名即可

    //设置适配相关
    GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
    //包与依赖包的加载
    UIPackage package = UIPackage.AddPackage("UI/teach");
    foreach (var item in package.dependencies)
    {
    UIPackage.AddPackage(item["name"]);
    }
    GComponent view = UIPackage.CreateObject("teach", "TeachPanel").asCom;
    GRoot.inst.AddChild(view);

    但如果没有放到指定路径下,就需要填入路径(前提是字体还在Resources文件夹内)

    1
    UIConfig.defaultFont = "Other/STHUPO";  //如果没有放到指定路径下(前提是还在Resources文件夹内)
  3. 如果字体文件放置在AB包中或者Resources下其他目录下,需要手动自己注册,手动从对应位置加载字体文件

    1
    2
    3
    4
    5
    6
    //手动从对应位置加载字体文件,或者从AB包内加载字体文件
    Font font = Resources.Load<Font>("Other/STCAIYUN");
    //实例化一个动态字体对象,传入字体名和字体对象
    DynamicFont dynamicFont = new DynamicFont("STCAIYUN", font);
    //注册这个动态字体对象
    FontManager.RegisterFont(dynamicFont);

字体相关问题解决

  1. 字体不带加粗 可以手动设置

    1
    FontManager.GetFont("字体名").customBold = true;
  2. 斜体和粗体不能同时使用 如果已经设置了customBold​​就不用设置customBoldAndItalic​​

    1
    FontManager.GetFont("字体名").customBoldAndItalic = true;
  3. 如果要使用TextMeshPro 需要在Unity编辑器的Scripting Define Symbols里增加FAIRYGUI_TMPRO​​

    image