22.工具类-TMP_TextUtilities
22.1 知识点
TMP_TextUtilities 类的作用
TMP_TextUtilities
是 TextMeshPro 中提供的一个实用工具类,包含多个常用方法,主要用于获取指定位置的文本信息。
我们可以在点击文本时利用该类来获取点击到的具体内容。
TMP_TextUtilities 类中的常用 API
以下方法返回的均是索引值,如果没有获取到信息,返回的索引为 -1
。
利用获取到的索引可以在 TMP 文本控件中的 textInfo
属性中访问以下信息:
linkInfo
wordInfo
characterInfo
lineInfo
获取给定位置文本中的具体信息
获取链接索引
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)
获取离给定位置最近的文本信息
获取链接索引
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)
使用示例
以下代码展示了如何通过 TMP_TextUtilities
获取点击文本内容的具体信息:
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
public class Lesson22_TMP_TextUtilities : MonoBehaviour, IPointerClickHandler
{
public TextMeshProUGUI textMeshProUGUI;
public void OnPointerClick(PointerEventData eventData)
{
print("OnPointerClick TextMeshProUGUI");
// 获取链接索引,传入 TMP、鼠标位置、UI 摄像机(默认可以传 null)
int linkIndex = TMP_TextUtilities.FindIntersectingLink(textMeshProUGUI, eventData.position, null);
// 如果不为 -1,则证明点击到了一个超链接信息
if (linkIndex != -1)
{
// 获取超链接显示的文本信息,例如 "百度"
print(textMeshProUGUI.textInfo.linkInfo[linkIndex].GetLinkText());
// 获取富文本标签 <link=?> 中的 ? 具体地址信息,例如 "谷歌"
print(textMeshProUGUI.textInfo.linkInfo[linkIndex].GetLinkID());
}
// 获取单字符索引,传入 TMP、鼠标位置、UI 摄像机(默认可以传 null)、是否检测可见性
int charIndex = TMP_TextUtilities.FindIntersectingCharacter(textMeshProUGUI, eventData.position, null, true);
// 如果索引不为 -1,打印点击到的字符
if (charIndex != -1)
{
print(textMeshProUGUI.textInfo.characterInfo[charIndex].character);
}
}
}
更多 API
更全面的文档可以参考官方文档: TextMeshPro TMP_TextUtilities API 文档
22.2 知识点代码
Lesson22_工具类_TMP_TMP_TextUtilities.cs
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Serialization;
public class Lesson22_工具类_TMP_TMP_TextUtilities : MonoBehaviour, IPointerClickHandler
{
public TextMeshProUGUI textMeshProUGUI;
public void OnPointerClick(PointerEventData eventData)
{
print("OnPointerClick TextMeshProUGUI");
// FindIntersectingLink 获取链接索引 传入TMP 鼠标位置 ui摄像机(默认可以传空)
int linkIndex = TMP_TextUtilities.FindIntersectingLink(textMeshProUGUI, eventData.position, null);
//如果不为-1 就证明点击到了一个超链接信息
if (linkIndex != -1)
{
//得到超链接显示的文本信息 例如 百度
print(textMeshProUGUI.textInfo.linkInfo[linkIndex].GetLinkText());
//得到富文本标签<link=?>中的?具体的地址信息 例如 谷歌
print(textMeshProUGUI.textInfo.linkInfo[linkIndex].GetLinkID());
}
// FindIntersectingCharacter 获取单字符索引 传入TMP 鼠标位置 ui摄像机(默认可以传空) 是否显示才去获取
int charIndex = TMP_TextUtilities.FindIntersectingCharacter(textMeshProUGUI, eventData.position, null, true);
if (charIndex != -1)
{
// 会打印点击到的字符
print(textMeshProUGUI.textInfo.characterInfo[charIndex].character);
}
}
void Start()
{
#region 知识点一 TMP_TextUtilities类的作用
//它是 TextMeshPro 中提供的一个实用工具类
//包含多个常用方法,主要用于获取指定位置的文本信息
//我们主要在点击文本时,利用该类来获取点击到的具体内容
#endregion
#region 知识点二 TMP_TextUtilities类中的常用API
//下面的方法返回的都是索引值
//如果没有获取到信息,返回的索引为-1
//利用获取到的索引可以在TMP文本控件中的textInfo属性中的
//linkInfo
//wordInfo
//characterInfo
//lineInfo
//来获取信息
//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.获取离给定位置最新的文本中的具体信息
// 获取链接索引: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
#endregion
}
}
22.3 练习题
TMP_TextUtilities类可以帮助我们制作什么功能?
在聊天框中,当我们点击副本名、装备名、玩家名等等文字时
动态的打开某一UI窗口,比如副本界面、商店界面、玩家信息展示界面等等
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com