You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何实现富文本可点击并检测点击事件?

用TextMeshPro-Text(UI)实现富文本可点击词汇及弹窗触发

1. 给可点击词汇添加富文本标签

在TextMeshPro组件的文本输入框中,使用<link>标签标记需要点击的内容,自定义ID区分不同目标:

By clicking, you agree to our <link="protocol">Platform Protocol</link> and <link="privacy">Privacy Policy</link>

protocol、privacy是自定义的链接标识,后续用来判断点击的是哪个词汇。

2. 编写点击检测脚本

创建名为TMP_LinkClickHandler的C#脚本,挂载到TextMeshPro-Text(UI)所在的游戏对象上,代码如下:

using UnityEngine;
using UnityEngine.EventSystems;
using TMPro;

public class TMP_LinkClickHandler : MonoBehaviour, IPointerClickHandler
{
    private TMP_Text _tmpText;

    void Awake()
    {
        _tmpText = GetComponent<TMP_Text>();
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        // 检测点击位置是否命中富文本链接
        int linkIndex = TMP_TextUtilities.FindIntersectingLink(_tmpText, eventData.position, eventData.pressEventCamera);
        if (linkIndex == -1) return;

        TMP_LinkInfo linkInfo = _tmpText.textInfo.linkInfo[linkIndex];
        switch (linkInfo.GetLinkID())
        {
            case "protocol":
                // 此处替换为Platform Protocol弹窗的显示逻辑
                Debug.Log("触发Platform Protocol弹窗");
                // 示例:ProtocolPopup.Instance.Show();
                break;
            case "privacy":
                // 此处替换为Privacy Policy弹窗的显示逻辑
                Debug.Log("触发Privacy Policy弹窗");
                // 示例:PrivacyPopup.Instance.Show();
                break;
        }
    }
}

注意:场景中必须存在EventSystem和StandaloneInputModule(默认UI模板会自带),否则点击事件无法被捕获。

3. 可选:添加hover高亮效果

如果需要鼠标悬浮时高亮词汇,给脚本补充IPointerEnterHandler和IPointerExitHandler接口,实现样式切换:

public void OnPointerEnter(PointerEventData eventData)
{
    int linkIndex = TMP_TextUtilities.FindIntersectingLink(_tmpText, eventData.position, eventData.pressEventCamera);
    if (linkIndex == -1) return;

    TMP_LinkInfo linkInfo = _tmpText.textInfo.linkInfo[linkIndex];
    // 将链接文本设为高亮色(这里用蓝色示例)
    for (int i = 0; i < linkInfo.linkTextLength; i++)
    {
        int charIndex = linkInfo.linkTextfirstCharacterIndex + i;
        _tmpText.textInfo.characterInfo[charIndex].color = Color.blue;
    }
    _tmpText.UpdateVertexData();
}

public void OnPointerExit(PointerEventData eventData)
{
    // 恢复链接文本的原始颜色
    _tmpText.textInfo.ClearLinkColors();
    _tmpText.UpdateVertexData();
}

关键检查项

  • 确认TextMeshPro-Text(UI)组件的Rich Text选项处于勾选状态(默认开启)。
  • 弹窗逻辑需根据你的项目结构调整,比如实例化预制体或调用单例显示方法。
  • 若点击无响应,检查EventSystem是否存在,脚本是否正确挂载到目标TextMeshPro对象上。

内容的提问来源于stack exchange,提问作者Seaky Lone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:28:31