Bil*_*ail 10 c# text unity-game-engine
我正在使用Unity创建一个Android / IOS应用程序。
在包含段落的页面中,我想知道是否单击文本的最后一句。(例如,“单击此处获取更多详细信息”)。单击此句子后,我想打开一个新页面。
我知道我可以放置2个文本元素并将此语句添加到第二个元素,并将重置语句添加到第一个元素,然后在第二个元素上添加onClick事件。
这是解决该问题的方法,但对于我而言,它无法解决问题,因为我正在动态获取文本,并且其大小会不时变化,因此第二个text元素将不会在第一个元素结束。
我需要用代码完成的解决方案。
我看到了同样的问题,但这是针对HTML和JavaScript的,而不是Unity的。
我将发布答案的代码片段之一,该代码片段具有与我想要的行为相同的行为。
const clickables = document.querySelectorAll('.clickable')
clickables.forEach(el => new Clickable(el))
function Clickable (el) {
const _handleClick = ({target}) => console.log(target.innerHTML)
const texts = el.textContent.split(/\s/)
el.innerHTML = ''
texts.forEach(t => {
const span = document.createElement('span')
span.innerHTML = `${t} `
span.addEventListener('click', _handleClick)
el.appendChild(span)
})
}Run Code Online (Sandbox Code Playgroud)
<h1 class="clickable">Some text</h1>
<h2 class="clickable">Some! more! text2</h1>Run Code Online (Sandbox Code Playgroud)
可以使用TextMeshPro或TextMeshProUGUI代替Text。然后,您可以使用来做很多花哨的事情TMP_TextUtilities。
实际上,有很多非常好的理由值得我们改用TMP,而不是使用TMP- Text到目前为止,我还没有找到Text比TMP 更喜欢的好方法。
链接的TMP_TextUtilities教程显示了更多精美的用例。
public class Example : MonoBehaviour
{
public TextMeshProUGUI text;
public string LastClickedWord;
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
只需用对象和脚本中Text的TextMeshProUGUI组件替换该组件。设置的用法text完全相同。
我想知道是否单击文本的最后一句。(“点击这里了解更多详情”
相反,FindIntersectingWord您也可以使用FindIntersectingLine然后检查索引来仅触发最后一个事件。
if(lineIndex == text.lineCount - 1)
Run Code Online (Sandbox Code Playgroud)
请注意,此处的行表示实际显示的行-不一定是换行符
或者,您可以例如计算并定义最后一句话中的单词数量并使用
if(wordIndex > text.textInfo.wordCount - LastSentenceLength)
Run Code Online (Sandbox Code Playgroud)
或者..您也可以直接使用链接,然后可以使用FindIntersectingLink并检查是否点击了最后一个。
注意:请确保传递与用于的相机相同的相机Canvas。我null之所以使用,是因为我使用了ScreenSpace-Overlay没有Camera引用的画布。如果您使用例如,WorldSpace您必须
Camera在Canvas→Event CameraCamera给FindIntersectingXXX | 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |