前言
軟件環境
Unity3D 5.3.7p4
TextMesh Pro 1.0.555.0b11(Jul 06.2017)
UGUI做為UI解決方案
文檔資料
TextMesh Pro的資料,可以參考我之前的博客:http://www.cnblogs.com/zhaoqingqing/p/7471499.html
解析超鏈接失敗
查看Textmeshpro的超鏈接示例,默認它是傳入了一個Camera,我后面將參數Camera傳為null。
public void OnPointerClick(PointerEventData eventData) { if (m_TextMeshPro) { //NOTE 如果UGUI沒用Camera渲染,TMPText不傳入Camera int linkIndex = TMP_TextUtilities.FindIntersectingLink(m_TextMeshPro, Input.mousePosition, null); if (linkIndex != -1) { TMP_LinkInfo linkInfo = m_TextMeshPro.textInfo.linkInfo[linkIndex]; //把解析后的linkId,通過事件發出去 InvokeEvent(linkInfo.GetLinkID(), linkInfo.GetLinkText(), eventData); } } }
具體源碼可以查看TMP_TextUtilities.FindIntersectingLink() 進入到方法:
TMP_TextUtilities.ScreenPointToWorldPointInRectangle(transform, (Vector2) position, camera, out position);
原因分析
如果傳入的camera沒有渲染當前的UI,TMP通過射線去找到當前點擊的區域,返回linkIndex,它會解析失敗。
解決辦法
如果你的UI渲染未使用相機,而是使用Screnn Space 或World Space的話,你可以把最后的Camera參數傳入null,就可以解決。