如何检测对动态更新的 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 是否兼容。如果是这种情况,我会在测试更新时和按下鼠标时添加打印,以验证鼠标按下是在文本更新后发生的,并且位置仍然正确。我还会打印索引以查看是否在给定位置实际找到了文本,或者是否存在其他问题。另外,请确保更改文本后没有任何内容的层序高于文本网格。
我正在尝试实现一项功能,该功能可以确定用户单击了文本中的哪个词。为此,我使用了 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 是否兼容。如果是这种情况,我会在测试更新时和按下鼠标时添加打印,以验证鼠标按下是在文本更新后发生的,并且位置仍然正确。我还会打印索引以查看是否在给定位置实际找到了文本,或者是否存在其他问题。另外,请确保更改文本后没有任何内容的层序高于文本网格。