UG4L9-2——字体的处理
UG4L9-2——字体的处理
本章代码关键字
1 | UIConfig.defaultFont //设置默认字体,如果字体文件在Resources根目录下或者子目录Fonts下则直接传入字体名,否则传入路径 |
FairyGUI支持的字体
-
系统字体 (不建议使用)
可能存在的问题:
- 如果使用系统字体,在别人的电脑或者设备上不见得存在同样的字体,可能效果和预期不一致
- 编辑器和游戏引擎可能无法识别部分字体的名字
-
TTF字体 (最常用)
将后缀为 **ttf/ttc/otf ** 的字体文件拖入到编辑器资源中,直接使用他们
如果要在项目设置的快捷菜单里添加字体,字体名称需要为这种格式:ui://包名/(字体的路径)
需要注意:发布后,字体文件不会被发布,我们需要自己手动将字体文件放置到引擎中,然后建立字体映射
Unity中将字体放置在Resources或者Resources/Fonts目录下,就不需要额外代码进行注册了
如果不是这个路径需要用代码进行注册处理,TTF字体设置相关 -
位图字体 (特殊需求时使用)
位图字体就是使用图片来表示某个文字
-
点击创建位图字体
-
拖入对应图片
- 图片:对应资源库中的一张图片
- 字符:该图片对应的字符
- 偏移XY:在水平和垂直方向上字符的偏移
- 占位:如果为0使用图片的宽度,如果不为0使用这里填写的值作为水平占位宽度
- 字体大小:位图字体的字号,勾选动态改变字号后生效
- 默认占位:统一设置所有字符的默认占位宽度
- 允许动态改变字号:勾选后,字体大小使图片可以缩放,
如果不设置时钟显示图片原本大小,不会缩放 - 允许动态改变颜色:勾选后可以改变颜色,
不勾选始终使用图片颜色
-
也支持类似NGUI中使用第三方位图字体制作工具
可以使用BMFont生成的文件,格式只支持fnt文件 生成后,编辑器导入素材,选择fnt文件即可
-
TTF字体设置相关
双击字体文件弹出窗口
-
系列:字体名称,只读
-
采样字体大小:渲染方式为SDFAA才有意义,
其它方式使用默认值16即可 -
渲染方式:
- Smooth:抗锯齿,建议使用
- Hinted Smooth:比Smooth更清晰,速度较慢,较小字体建议使用
- Hinted Raster:光栅化渲染方式,清晰度最高,但速度更慢
- SDFAA:使用SDF技术渲染字体,TextMeshPro时可使用
-
AtlasPadding:图集间距,几乎不用修改
-
斜体样式:SDFAA时才有,使用斜体时的倾斜角度15~60
-
粗体分量:SDFAA时才有,使用粗体时,粗体的重量,-3~3
-
关于TextMeshPro的支持 只需要在设置中将字体的渲染方式设置为SDFAA即可 只要Unity中导入了TextMeshPro插件,之后就能正常显示
使用TTF字体的注意事项
-
需要自己导入字体文件到工程中,建议直接放入Resources目录或其Fonts子目录下,FGUI会自动帮助我们进行字体注册
-
注意!对于在FairyGUI里设置的默认字体并使用的文本,我们需要在UIConfig里自己手动设置!否则无法正常显示
我们也可以在代码内设置默认字体,这一步需要在显示面板之前完成
如果字体放在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文件夹内)
-
如果字体文件放置在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
FontManager.GetFont("字体名").customBold = true;
-
斜体和粗体不能同时使用 如果已经设置了
customBold
就不用设置customBoldAndItalic
1
FontManager.GetFont("字体名").customBoldAndItalic = true;
-
如果要使用TextMeshPro 需要在Unity编辑器的Scripting Define Symbols里增加
FAIRYGUI_TMPRO