【发布时间】:2020-01-01 14:20:31
【问题描述】:
我正在使用 Unity 创建一个 Android/IOS 应用程序。
在包含段落的页面中,我想知道我是否点击了文本的最后一句话。 (例如“单击此处了解更多详细信息”)。 点击这句话后我想打开一个新页面。
我知道我可以放置 2 个文本元素并将这句话添加到第二个元素,然后重置到第一个元素并在第二个元素上添加 onClick 事件。
这是问题的解决方案,但在我的情况下,它无法解决问题,因为我正在动态获取文本,并且它的大小会不时改变,所以第二个文本元素不会从同一个开始第一个元素结束后的行。
我需要一个用代码完成的解决方案。
我看到了same question,但它适用于 HTML 和 JavaScript,而不适用于 Unity。
我将发布一个答案的代码 sn-p,它与我想要的行为相同。
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)
})
}
<h1 class="clickable">Some text</h1>
<h2 class="clickable">Some! more! text2</h1>
【问题讨论】:
-
可以通过TextMeshPro实现
-
@derHugo 显然现在每种材料都有多个网格
textInfo.meshInfo[textInfo.characterInfo[currentCharacter].materialReferenceIndex].vertices。 -
@Iggy 是的,只是注意到这并不重要.. 不需要只是获得悬停的单词