22.TMP_TextUtilities

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

×

喜欢就点赞,疼爱就打赏