分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
当前测试版本:Unity 5.2.0
Unity 新 UI 系统中的
Text 组件支持富文本标签,标签包括 b(黑体)、i(斜体)、size(大小)、color(颜色),并不支持超链接以及超链接点击。之前一篇实现了简单的插入图片方法,见《
Unity Text 插入图片》。这里在上一篇的基础上,继续实现插入超链接。
标签
设计超链接自有的标签,这里使用 a 标签来表示超链接,完整的内容如下:
<a href=超链接>文本</a>
颜色支持
让超链接的文本内容,自动变成其他颜色显示,比如通用的蓝色显示。这一步,只需解析超链接标签,提取里面的文本,对其加上颜色标签,然后去掉超链接标签内容。
增加变量声明,代码如下:
1
2 3 4 5 6 7 8 9 10 11 |
/// <summary>
/// 文本构造器 /// </summary> private static readonly StringBuilder s_TextBuilder = new StringBuilder(); /// <summary> /// 超链接正则 /// </summary> private static readonly Regex s_HrefRegex = new Regex(@ "<a href=([^>\n\s]+)>(.*?)(</a>)", RegexOptions.Singleline); |
增加获取解析之后的文本方法,代码如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/// <summary>
/// 获取超链接解析后的最后输出文本 /// </summary> /// <returns></returns> protected string GetOutputText() { s_TextBuilder.Length = 0; var indexText = 0; foreach (Match match in s_HrefRegex.Matches(text)) { s_TextBuilder.Append(text.Substring(indexText, match.Index - indexText)); s_TextBuilder.Append( "<color=blue>"); // 超链接颜色 s_TextBuilder.Append(match.Groups[ 2].Value); s_TextBuilder.Append( "</color>"); indexText = match.Index + match.Length; } s_TextBuilder.Append(text.Substring(indexText, text.Length - indexText)); return s_TextBuilder.ToString(); } |
更改
OnPopulateMesh 方法,替换最终绘制的文本,代码如下:
1
2 3 4 5 6 7 8 9 |
protected override void OnPopulateMesh(Mesh toFill)
{ var orignText = m_Text; m_Text = GetOutputText(); base.OnPopulateMesh(toFill); m_Text = orignText; // ................ } |
用下面的内容进行测试:
1
|
请立即装备 <a href= mujian>[木剑] </a>武器
|
效果如下所示:
点击支持
超链接需要支持可点击事件,故要让派生类继承自
IPointerClickHandler 接口。另外,点中超链接文本的位置检测,需要有矩形框来判断,而当文本被折行时,矩形框也要包括下一行的部分。
修改之后的代码如下: