·来源于唐老狮的视频教学,仅作记录和感悟记录,方便日后复习或者查找
一.TMP基础设置
1.打开并查看
可以在项目设置中打开
2.参数介绍
- Default Font Asset:默认使用的字体(每次创建TMP的时候上面会自动使用的字体)
- Path:字体资源的存储路径
- Fallback Font Assets List:默认备用字体资源列表。当在TMP在当前字体中找不到对应的字符的时候,就会来这个备用字体资源列表中进行查找
- Match Material Settings:匹配材质预设。启用了之后使用备用字形的时候会和主字形进行匹配,以让备用字形和主字形看起来相似
- Get Font Features:运行的时候获取字形的功能
- Missing Character Unicode:当找不到对应的字符的时候,使用哪个字符来替代
- Disable warnings:开启之后避免Unity给每个丢失的字符都报警告
- TextMeshPro:X:创建3D文本的时候的宽度。Y:创建3D文本你的时候的高度
- TextMeshProUI:X:创建UI文本的时候的宽度。Y:创建UI文本的时候的高度
- Enable Raycast Target:创建文本的时候,是否可以作为射线检测的目标
- Auto Size Text Container:创建文本文本的时候,是否自动调整大小
- Is Object Scale Static:是否为静态缩放(开启之后可以节约一些性能,因为会跳过对于文本的缩放计算,当确认文本的缩放比例不会变化之后,可以开启)
- Default Font Size:默认字体大小
- Text Auto Size Ratios:文本字体大小的自动缩放比率
- Word Wrapping:是否启用自动换行
- Kerning:是否启用字偶间距调整
- Extra Padding:是否额外进行填充,可以降低字符在sprite的边界处被截断的几率
- Tint All Sprites:是否为所有的精灵图片着色
- Parse Escape Sequence:是否解析转义字符
- Default Sprite Asset:默认的精灵图片资源(当TMP中没有指定添加精灵图片资源但是使用了精灵图片资源相关的富文本标签的时候,用的就是这里的精灵图片资源)
- Missing Sprite Unicode:没找到对应的精灵图片的时候使用的替代精灵图片
- iOS Emoji Support:是否支持IOS自带的表情(一般都选择支持了)
- Path:精灵图片资源的存储路径
- Default Style Sheet:默认样式表
- Path:样式表的存储位置
- Path:渐变预设配置的存储路径
- Leading Characters:前导字符。一般不允许这些符号出现在开头 遇到这些字符触发自动换行时,不触发换行,让其显示在尾部
(比如像这些)
- Following Characters:尾随字符。一般一般不允许这些符号出现在行的结尾,如果这些符号在行的结尾出现自动换行了 会将这些符号放倒下一行
(比如像这些)
有需要添加的我们手动加进去就是了
- Use Modern Line Breaking:使用现代换行,启用后将采用更符合韩语规则的换行规则(当有韩语相关的时候可以启用以优化韩语的阅读体验)
二.材质球相关
1.TMP使用的渲染技术
TMP中使用的渲染技术叫做SDF(Signal Distance Field):即有符号距离场。
符号:在字符内部的像素点的符号为负,在字符外部的像素点的符号为正
距离:是指像素点离字符边缘的距离
场:整个字体或图形周围的距离值的分布
对于任意材质球,在这个路径下可以给他选择到相应的Shader
2.SDF材质的参数相关
2.1.基础设置
Color:基础颜色(它会和TMP设置中的顶点颜色相乘叠加,一般不在这里设置它)
Texture:文字的纹理
- Tiling:平铺XY方向的大小
- Offset:纹理XY方向的采样偏移
- Speed:纹理XY方向的移动速度
纹理的运动效果
Softness:边缘柔和度。可以产生模糊效果
Dilate:拓展。可以让字体变粗变细。
2.2.边缘线
Color:边缘线颜色
Texture:边缘线纹理(其他参数和上面的字形纹理差不多)
Thickness:边缘线的粗细
2.3.底部阴影
Underlay Type:底图阴影类型【无阴影,普通阴影,内阴影】
Color:阴影颜色
Offset X:X方向的偏移值
Offset Y:Y方向的偏移值
Dilate:阴影的大小
Softness:阴影的柔和度。越大越模糊
2.4.光照
2.4.1.斜面设置
Type:斜面类型【外斜面,内斜面】
Amount:斜面陡峭程度
Offset:斜面偏移值
Width:斜面宽度
Roundness:斜面平滑度(越大越平滑)
Clamp:限制斜面最大高度
2.4.2.本地光照
Light Angle:光照角度
Specular Color:高光颜色
Specular Power:高光强度
Reflectivity Power:反射强度(越大越能反应出周围的颜色)
Diffuse Shadow:漫反射阴影(值越大,阴影越强)
Ambient Shadow:环境光阴影
2.4.3.凹凸贴图
Texture:使用的凹凸贴图
Face:显示在字符上的程度
Outline:显示在字符的边缘线上的程度
2.4.4.环境映射
Face Color:立方体贴图对文本的颜色影响,会和文本进行颜色叠加
Outline Color:立方体纹理对文本边缘线颜色的影响,会和文本边缘线颜色叠加
Texture:使用的立方体贴图。它能够让字体反射出周围的环境
Rotation:立方体贴图在采样上的旋转角度
2.5.发光
Color:发光的颜色
Offset:发光的偏移值
Inner:发光向内延申的效果
Outer:发光向外延申的效果
Power:发光的强度(越往左越大,越往右越小)
2.6.调试测试
调试设置,主要公布了Shader内部的一些属性 可以看到该Shader中更多的一些属性
三.TMP_TextEventHandler类
1.TMP_TextEventHandler是什么
它是一个TMP的辅助组件,用于辅助处理获取鼠标悬停在TMP文本上的时候的一些事件
主要作用是监听并响应 TMP 文本中的特定区域或标签(如链接 <link> 和特定字符)
的点击和鼠标悬停事件
这个类可以让你对文本的某些部分进行交互式操作,适用于创建如超链接、工具提示、弹出信息等效果
2.TMP_TextEventHandler的使用
我们可以在任一TMP控件下添加该组件
该组件上包含了各种的响应事件,提供给外部绑定相关的事件
可以声明相关的函数,并在代码中设置监听函数,或者是直接拖入
TMP_TextEventHandler tmpHandler = this.GetComponent<TMP_TextEventHandler>();
tmpHandler.onLinkSelection.AddListener(MyLinkSelectionHandler);
tmpHandler.onWordSelection.AddListener(MyWordSelectionHandler);
tmpHandler.onLineSelection.AddListener(MyLineSelectionHandler);
tmpHandler.onSpriteSelection.AddListener(MySpriteSelectionHandler);
tmpHandler.onCharacterSelection.AddListener(MyCharSelectionHandler);
下面列举相关的监听函数例子
public void MyLinkSelectionHandler(string linkInfo, string linkText, int index)
{
print("**********超链接*************");
print(linkInfo);
print(linkText);
print(index);
}
public void MyCharSelectionHandler(char charInfo, int i)
{
print("**********字符*************");
print(charInfo);
print(i);
}
public void MySpriteSelectionHandler(char spirteInfo, int i)
{
print("**********精灵图片*************");
print(spirteInfo);
print(i);
}
public void MyWordSelectionHandler(string word, int i1, int i2)
{
print("**********单词*************");
print(word);
print(i1);
print(i2);
}
public void MyLineSelectionHandler(string lineInfo, int i1, int i2)
{
print("**********行*************");
print(lineInfo);
print(i1);
print(i2);
}
①int类型的参数通常是传入当前这个类型的文本在当前整个文本中的索引值
②提供了链接,字符,精灵图片,单词,行五个类型文本的鼠标悬停事件监听
四.TMP_TextUtilities类
1.TMP_TextUtilities是什么
他是TMP中提供的一个实用工具类
通常提供给我们进行点击事件的相关处理的方法
当我们需要通过点击文本来获取其对应信息的时候,可以使用该工具类中的方法
2.TMP_TextUtilities的常用API
下面的方法返回的都是索引值
如果没有获取到信息,返回的索引为-1
利用获取到的索引可以在TMP文本控件中的textInfo属性中的
- linkInfo
- wordInfo
- characterInfo
- lineInfo
来获取信息
2.1.获取给定位置文本中的具体信息
获取链接索引:int FindIntersectingLink(TMP_Text text, Vector3 position, Camera camera)
获取单词索引:int FindIntersectingWord(TMP_Text text, Vector3 position, Camera camera)
获取单字符索引:int FindIntersectingCharacter(TMP_Text text, Vector3 position, Camera camera)
获取行索引:int FindIntersectingLine(TMP_Text text, Vector3 position, Camera camera)
2.2.获取离给定位置最新的文本中的具体信息
获取链接索引:int FindNearestLink(TMP_Text text, Vector3 position, Camera camera)
获取单词索引:int FindNearestWord(TMP_Text text, Vector3 position, Camera camera)
获取单字符索引:int FindNearestCharacterOnLine (TMP_Text text, Vector3 position, Camera camera)
获取行索引:int FindNearestLine(TMP_Text text, Vector3 position, Camera camera)
更多API:
https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/api/TMPro.TMP_TextUtilities.html
3.TMP_TextUtilities的使用
首先这个类需要在文本被点击的时候使用,因此我们需要给这个文本控件添加一个继承了IPointerClickHandler的接口的脚本,在这个接口的方法中去使用该工具类
使用示例:
public void OnPointerClick(PointerEventData eventData)
{
print("123");
int linkIndex = TMP_TextUtilities.FindIntersectingLink(tmpUIText, eventData.position, null);
//如果不为-1 就证明点击到了一个超链接信息
if(linkIndex != -1)
{
//这是得到超链接显示的文本信息
print(tmpUIText.textInfo.linkInfo[linkIndex].GetLinkText());
//这是得到富文本标签<link=?>中的?具体的地址信息
print(tmpUIText.textInfo.linkInfo[linkIndex].GetLinkID());
}
int charIndex = TMP_TextUtilities.FindIntersectingCharacter(tmpUIText, eventData.position, null, true);
if(charIndex != -1)
{
print(tmpUIText.textInfo.characterInfo[charIndex].character);
}
}
①上面通过获取链接文本的索引值,在textInfo的linkInfo数组中找到对应的链接,并用的GetLinkText()以及GetLinkID()来获取对应的链接文本和ID
②下面通过获取字符文本你的索引值,在textInfo的characterInfo数组中找到相应的链接,并用.character变量直接获取字符值
五.其他工具类
更多API:https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/api/TMPro.html
六.总结
①TMP可以在项目中直接设置其一些创建时候的初始设置。比如字体类型,以及字体大小等。这样可以减少我们的重复操作,提升我们的开发效率
②TMP用到了SDF的渲染着色算法来优化字形的显示效果,我们可以通过调整它暴露出来的一些参数给文本实现纹理附着,纹理动画,底部阴影,光照效果,自发光效果等多样的字形效果
③TMP提供了很多的工具类。其中TMP_TextEventHandler主要提供鼠标悬停的时候触发的事件响应监听。我们可以通过它来制作信息悬浮窗口之类的功能
④TMP_TextUtilities则能够帮助我们进行点击事件的信息获取,注意要搭配UGUI提供的点击事件来使用