新版Unity(如2022) UGUI默认使用TextMeshPro显示文本;
相较于旧的Text组件,TextMeshPro功能更强大,渲染效果更好;
本文学习自 Unity TextMeshPro 3.2.0官方教程
1. 导入TextMeshPro必须的资源:
执行后往项目中导入如下资源:
2. 创建TextMeshPro对象:
UI Text:
3D Text:
3. 创建TextMeshPro Font Asset:
选择原始字体(如ttf):
选择生成的Font Asset,调整相关参数:
可为字体创建多个渲染材质球:
注意命名前面一部分保持一致,然后就可在Text组件上使用;
4. TextMeshPro组件属性:
比较简单,可参阅官方文档;
5. SDF渲染( Signed Distance Field,有向距离场):
Unity默认使用位图渲染字体,即根据字体信息生成对应字符的位图信息:
使用这种渲染方式,当字体放大后,锯齿感严重,渲染效果不理想;
TextMeshPro默认使用SDF渲染:
SDF字体贴图中记录的不是字符位图颜色信息,而是该像素点到字符边缘的距离;在字符中间,距离值最大,然后从里往外逐渐变小;渲染时根据当前距离值来决定显示的颜色值;
贴图放大显示时,由于插值的是距离,实际计算的颜色值仍能保持准确性,因此使用SDF渲染的字符更清晰,效果更好;
使用SDF还可以很方便的实现描边、阴影和外发光等效果;
6. 显示Sprite:
通过富文本标签在文本中显示Sprite;
1. 导入图集贴图:
2. 设置贴图类型:
3. 切分图集:
4. 创建TextMeshPro Sprite Asset:
创建好后,原始贴图不可以删除,但贴图导入设置可恢复为默认;
5. 在Text组件中显示Sprite:
设置组件的Sprite Asset:
使用sprite富文本标签显示sprite:
图片<sprite index=0>图片<sprite name="icons_1">
如果不设置组件的Sprite Asset,则指定要加载的Sprite Asset名字;
且Sprite Asset得位于Setting指定的Resource目录下,不推荐:
图片<sprite="EmojiOne" index=0>图片<sprite="icons" name="icons_1">
注意,emoji的实现也是一样的,只是每个emoji有自己固定的unicode编码,输入时以\U开头,加上unicode编码:
7. Asset Font材质球设置:
Shader分为两大类:
用于bitmap渲染;
用于SDF渲染;
每类Shader又分为桌面版和移动设备版本;
SDF shader有三类:
Distance Field,
Distance Field Overlay,与前一个相同,只是渲染在前面;
Distance Field (Surface),支持光照计算;
SDF shader可以容易实现 描边,底层和斜面效果,但要注意参数过大时,在字体图集中会采样到相邻字符的信息,造成干扰,可减少效果或增大字体图集字符间距;
使用Distance Field shader的材质球属性:
Face:
控制文本的整体外观;
Outline:
Underlay:
主要用于创建投影效果;
Glow,外发光:
效果叠加在原始字符上;