如何检测对动态更新的 TextMeshProUGUI 文本的点击?

How to detect clicks on a dynamically updated TextMeshProUI text?

我正在尝试实现一项功能,该功能可以确定用户单击了文本中的哪个词。为此,我使用了 TextMeshProUGUI 元素和以下代码:

using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro;

public class ExtraWordsDefinition : MonoBehaviour { 

public TextMeshProUGUI text;

public string LastClickedWord;

void Start()
{
    text = GetComponent<TextMeshProUGUI>();
}

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        var wordIndex = TMP_TextUtilities.FindIntersectingWord(text, Input.mousePosition, null);

        if (wordIndex != -1)
        {
            LastClickedWord = text.textInfo.wordInfo[wordIndex].GetWord();

            Debug.Log("Clicked on " + LastClickedWord);
        }
    }
}

}`

如果元素中的文本是静态的(i.e.the 我在 Unity 检查器的组件设置中指定的文本),则此代码可以正常工作,然后我点击的文字会显示在控制台中。

但是,如果我尝试通过代码动态更改组件的文本,那么脚本将完全停止检测对文本的点击(if 条件不起作用)。此外,这种更改文本的方式会重置文本对齐设置。

起初我编写了代码,通过为“.text”分配一个新字符串来更改文本 属性,但我也尝试通过 SetText() 方法更改文本,但那没有不要改变任何东西。不幸的是,搜索互联网也没有帮助我找到答案。

请帮我看看是什么原因

首先,我会添加日志来验证鼠标 Vector 和 TextMesh Vector 是否兼容。如果是这种情况,我会在测试更新时和按下鼠标时添加打印,以验证鼠标按下是在文本更新后发生的,并且位置仍然正确。我还会打印索引以查看是否在给定位置实际找到了文本,或者是否存在其他问题。另外,请确保更改文本后没有任何内容的层序高于文本网格。