21.字体

21.FGUI基础-控件-文本-字体的处理


21.1 知识点

FairyGUI支持的字体

系统字体(不建议使用)


可能存在的问题:

  • 如果使用系统字体,在别人的电脑或设备上可能找不到相同的字体,导致效果与预期不同。
  • 编辑器和游戏引擎可能无法识别某些字体的名称。

TTF字体(最常用)

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

TTF字体注意事项
  • 发布后,字体文件不会被发布。
  • 我们需要手动将字体文件放置到引擎中,并建立字体映射。
  • 在 Unity 中,将字体放置在 Resources 或者 Resources/Fonts 目录下,就无需额外的代码进行注册。
  • 如果字体文件不在这个路径下,需要使用代码进行注册处理。
TTF字体设置相关参数

  • 双击自己文件弹出窗口
  • 系列:字体名称,只读
  • 采样字体大小:渲染方式为SDFAA才有意义,其它方式使用默认值16即可
  • 渲染方式:
    • Smooth:抗锯齿,建议使用
    • Hinted Smooth:比Smooth更清晰,速度较慢,较小字体建议使用
    • Hinted Raster:光栅化渲染 精细度最高 性能消耗最大
    • SDFAA:使用SDF技术渲染字体,TextMeshPro时可使用
  • AltasPadding:SDFAA时才有,图集的渲染距离
  • 斜体样式:SDFAA时才有,使用斜体时的倾斜角度15~60
  • 粗体分量:SDFAA时才有,使用粗体时,粗体的重量,-3~3
关于TextMeshPro的支持
  • 要在设置中将字体的渲染方式设置为SDFAA即可
  • Unity中导入了TextMeshPro插件,就能正常显示

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

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

创建位图字体

点击创建位图字体,会弹出一个窗口 让我们拖入图片 编辑位图字体

位图字体设置窗口相关参数

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

Unity使用TTF字体的注意事项

导入字体到Unity工程

需要自己导入字体文件到工程中,建议直接放入Resources目录或其Fonts子目录下,放到这两个路径下,FGUI会自动帮助我们进行字体注册
注意:默认字体不会正常显示 因为在FGUI设置的默认字体在发布Unity后不会生效 需要添加UIConfig组件 在UIConfig组件添加默认字体

默认字体需要自己手动设置

//注意:设置默认字体 要在显示面板之前
//如果是放置在指定文件夹下 那么直接填写字体名即可
UIConfig.defaultFont = "STHUPO";
//如果没有放到指定路径Resources目录或其Fonts子目录下 设置默认字体要指定文件夹路径
UIConfig.defaultFont = "Other/STHUPO";

字体文件放置在AB包中或者Resources下其他目录下

//3.如果字体文件放置在AB包中或者Resources下其他目录下,需要手动自己注册
//手动从对应位置加载字体文件 传入路径
Font font = Resources.Load<Font>("Other/STCAIYUN");
//然后申明一个 动态字体类型对象
DynamicFont dFont = new DynamicFont("STCAIYUN", font);
//注册它
FontManager.RegisterFont(dFont);

设置组件并发布

基础包和组件面板的导入

//基础包和组件面板的导入
//设置适配相关
GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
//当前包和依赖包的加载
UIPackage package = UIPackage.AddPackage("UI/FGUI教程");
foreach (var item in package.dependencies)
{
    UIPackage.AddPackage("UI/" + item["name"]);
}
//创建组件对象 要设置为导出
GComponent view = UIPackage.CreateObject("FGUI教程", "Lesson21_FGUI基础_控件_文本_字体的处理").asCom;
//添加到根对象
GRoot.inst.AddChild(view);

运行结果

字体其他相关问题解决

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

FontManager.GetFont("字体名").customBold = true;

斜体和粗体不能同时使用 如果已经设置了customBold 不用设置customBoldAndItalic

FontManager.GetFont("字体名").customBoldAndItalic = true;

如果要使用TextMeshPro 需要在Unity编辑器的Scripting Define Symbols里增加 FAIRYGUI_TMPRO


21.2 知识点代码

using FairyGUI;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson21_FGUI基础_控件_文本_字体的处理 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 FairyGUI支持的字体
        //1.系统字体(不建议使用)
        //可能存在的问题
        //如果使用系统字体,在别人的电脑或者设备上不见得存在同样的字体,可能效果和预期不一致
        //编辑器和游戏引擎可能无法识别部分字体名字

        //2.TTF字体(最常用)
        //将后缀为ttf/ttc/otf的字体文件拖入到编辑器资源中,直接使用他们

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

        //TTF字体设置相关参数

        //3.位图字体(特殊需求时使用)
        //位图字体就是使用图片来表示某个文字
        #endregion

        #region 知识点二 使用TTF字体的注意事项

        //1.需要自己导入字体文件到工程中,建议直接放入Resources目录或其Fonts子目录下,放到这两个路径下,FGUI会自动帮助我们进行字体注册 
        //注意:默认字体不会正常显示 因为在FGUI设置的默认字体在发布Unity后不会生效 需要添加UIConfig组件 在UIConfig组件添加默认字体

        //2.默认字体需要自己手动设置
        //注意:设置默认字体 要在显示面板之前
        //如果是放置在指定文件夹下 那么直接填写字体名即可
        UIConfig.defaultFont = "STHUPO";
        //如果没有放到指定路径Resources目录或其Fonts子目录下 设置默认字体要指定文件夹路径
        UIConfig.defaultFont = "Other/STHUPO";

        //3.如果字体文件放置在AB包中或者Resources下其他目录下,需要手动自己注册
        //手动从对应位置加载字体文件 传入路径
        Font font = Resources.Load<Font>("Other/STCAIYUN");
        //然后申明一个 动态字体类型对象
        DynamicFont dFont = new DynamicFont("STCAIYUN", font);
        //注册它
        FontManager.RegisterFont(dFont);

        //基础包和组件面板的导入
        //设置适配相关
        GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
        //当前包和依赖包的加载
        UIPackage package = UIPackage.AddPackage("UI/FGUI教程");
        foreach (var item in package.dependencies)
        {
            UIPackage.AddPackage("UI/" + item["name"]);
        }
        //创建组件对象 要设置为导出
        GComponent view = UIPackage.CreateObject("FGUI教程", "Lesson21_FGUI基础_控件_文本_字体的处理").asCom;
        //添加到根对象
        GRoot.inst.AddChild(view);

        #endregion

        #region 知识点三 字体相关问题解决

        //1.字体不带加粗 可以手动设置
        //FontManager.GetFont("字体名").customBold = true;

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

        //3.如果要使用TextMeshPro 需要在Unity编辑器的Scripting Define Symbols里增加 FAIRYGUI_TMPRO

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏