Unity Text 插入超链接
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
标签
颜色支持
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(); } |
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>武器
|
点击支持
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
/// <summary>
/// 超链接信息列表 /// </summary> private readonly List<HrefInfo> m_HrefInfos = new List<HrefInfo>(); /// <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); [Serializable] public class HrefClickEvent : UnityEvent<string> { } [SerializeField] private HrefClickEvent m_OnHrefClick = new HrefClickEvent(); /// <summary> /// 超链接点击事件 /// </summary> public HrefClickEvent onHrefClick { get { return m_OnHrefClick; } set { m_OnHrefClick = value; } } /// <summary> /// 获取超链接解析后的最后输出文本 /// </summary> /// <returns></returns> protected string GetOutputText() { s_TextBuilder.Length = 0; m_HrefInfos.Clear(); 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>"); // 超链接颜色 var group = match.Groups[1]; var hrefInfo = new HrefInfo { startIndex = s_TextBuilder.Length * 4, // 超链接里的文本起始顶点索引 endIndex = (s_TextBuilder.Length + match.Groups[2].Length - 1) * 4 + 3, name = group.Value }; m_HrefInfos.Add(hrefInfo); 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(); } /// <summary> /// 点击事件检测是否点击到超链接文本 /// </summary> /// <param name="eventData"></param> public void OnPointerClick(PointerEventData eventData) { Vector2 lp; RectTransformUtility.ScreenPointToLocalPointInRectangle( rectTransform, eventData.position, eventData.pressEventCamera, out lp); foreach (var hrefInfo in m_HrefInfos) { var boxes = hrefInfo.boxes; for (var i = 0; i < boxes.Count; ++i) { if (boxes[i].Contains(lp)) { m_OnHrefClick.Invoke(hrefInfo.name); return; } } } } /// <summary> /// 超链接信息类 /// </summary> private class HrefInfo { public int startIndex; public int endIndex; public string name; public readonly List<Rect> boxes = new List<Rect>(); } |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
protected override void OnPopulateMesh(Mesh toFill)
{ var orignText = m_Text; m_Text = GetOutputText(); base.OnPopulateMesh(toFill); m_Text = orignText; var verts = toFill.vertices; // ...... 处理图片 // 处理超链接包围框 foreach (var hrefInfo in m_HrefInfos) { hrefInfo.boxes.Clear(); if (hrefInfo.startIndex >= verts.Length) { continue; } // 将超链接里面的文本顶点索引坐标加入到包围框 var pos = verts[hrefInfo.startIndex]; var bounds = new Bounds(pos, Vector3.zero); for (int i = hrefInfo.startIndex, m = hrefInfo.endIndex; i < m; i++) { if (i >= verts.Length) { break; } pos = verts[i]; if (pos.x < bounds.min.x) // 换行重新添加包围框 { hrefInfo.boxes.Add(new Rect(bounds.min, bounds.size)); bounds = new Bounds(pos, Vector3.zero); } else { bounds.Encapsulate(pos); // 扩展包围框 } } hrefInfo.boxes.Add(new Rect(bounds.min, bounds.size)); } } |
1
2 3 4 5 6 7 8 9 10 |
using System;
using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; public class TextPic : Text, IPointerClickHandler |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using UnityEngine;
public class testHref : MonoBehaviour { public TextPic textPic; void Awake() { textPic = GetComponent<TextPic>(); } void OnEnable() { textPic.onHrefClick.AddListener(OnHrefClick); } void OnDisable() { textPic.onHrefClick.RemoveListener(OnHrefClick); } private void OnHrefClick(string hrefName) { Debug.Log("点击了 " + hrefName); } } |
图片结合
1
2 3 4 5 6 7 8 9 10 11 12 |
/// <summary>
/// 解析完最终的文本 /// </summary> private string m_OutputText; protected void UpdateQuadImage() { m_OutputText = GetOutputText(); m_ImagesVertexIndex.Clear(); foreach (Match match in s_Regex.Matches(m_OutputText)) // ...................... } |
1
2 3 4 5 6 7 8 |
protected override void OnPopulateMesh(Mesh toFill)
{ var orignText = m_Text; m_Text = m_OutputText; base.OnPopulateMesh(toFill); m_Text = orignText; // .......................... } |
Unity 5.2.2 接口更改,更改上面的代码如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
protected override void OnPopulateMesh(VertexHelper toFill)
{ var orignText = m_Text; m_Text = m_OutputText; base.OnPopulateMesh(toFill); m_Text = orignText; UIVertex vert = new UIVertex(); // 抹掉左下角的小黑点 if (m_ImagesVertexIndex.Count != 0) // 处理超链接包围框 // 将超链接里面的文本顶点索引坐标加入到包围框 toFill.PopulateUIVertex(ref vert, i); |
还有图片的位置:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
protected void UpdateQuadImage()
{ #if UNITY_EDITOR if (UnityEditor.PrefabUtility.GetPrefabType(this) == UnityEditor.PrefabType.Prefab) { return; } #endif m_OutputText = GetOutputText(text); m_ImagesVertexIndex.Clear(); foreach (Match match in s_ImageRegex.Matches(m_OutputText)) { var picIndex = match.Index; var endIndex = picIndex * 4 + 3; m_ImagesVertexIndex.Add(endIndex); // ...... |
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
Unity Text 插入超链接相关推荐
- Unity Text 插入图片
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 当前测试 ...
- Ctrl+K:插入超链接(Hyperlink)
也许大家都知道了这个快捷键(Shortcut Key):Ctrl+K在Office程序之中可用来插入超链接.今天在写Blog的时候,才发现.Text使用的FreeTextBox其实也支持这个Short ...
- jsp中去掉超链接下划线吗_好烦啊,PPT 插入超链接,文字自动变色还有下划线!还不能改?!...
「老师,PPT 中插入超链接,为什么设置之后文字不仅改变了颜色,还多了一条下划线,但是选中后更改没有反应--有没有办法让文字看着正常一点?」 效果类似这样: 这是在给秋叶PPT的学员进行答疑的时候,遇 ...
- PPT文档中如何插入超链接
PPT如何插入超链接呢?一起来看看吧! 1.运行office软件,打开需要插入超链接的PPT文档: 2.点击鼠标选中想要插入超链接位置,右键,菜单中选择"超链接": 3.此时,在 ...
- Unity Text富文本(文本变得多姿多彩)
Unity Text富文本(文本变得多姿多彩) 实例: 步骤如下: 1.创建一个UI Text 2.Text组件中的Rich Text要勾选上 3.写内容 html控制代码 实例: 步骤如下: 1.创 ...
- unity Text文字淡入效果
unity Text文字淡入效果 CrossFadeAlpha()方法 先将alpha降为0,再改为1. public Text t;void Start() {t.CrossFadeAlpha(0f ...
- unity Text Mesh Pro Sprite Animation 支持动图,动态表情
unity Text Mesh Pro Sprite Animation 支持动图,动态表情 使用格式 <sprite='assetName' anim='first frame, last f ...
- 用计算机做表格的超链接,如何在Excel中插入”超链接”功能
我们在中文Excel中查阅数据时,往往须要把工作表从头至尾浏览一遍,如果工作表很长,这样做显得很麻烦.使用中文Excel提供的超链接功能,只须单击鼠标,即可跳转到当前工作表的某个位置或者其他工作表(甚 ...
- 超链接有哪几种 制作表格时WPS怎么在表格中插入超链接
在制作wps表格的时候,怎么样在表格中插入超链接呢?下面小编就为你介绍wps表格如何插入超链接的方法啦! wps表格插入超链接的方法: 1.打开WPS表格,我们新建一个空白文档. 2.我们点击插入菜单 ...
最新文章
- 解决烦人的img与input不能水平对齐的问题
- 【转】Hibernate和IBatis对比
- c# 类的基本知识,未完,待续
- leetcode696. 计数二进制子串
- 博客园配置windows live writer,实现本地代码高亮
- 在计算机系统中 外存储器必须通过,大学计算机基础第4章作业.doc
- zookeeper:Too many connections 故障处理记录
- Java基础篇:如何应用接口?
- 11.30上海交大PMP试题每日一题
- LabVIEW 使用入门(简明笔记)
- 计算机网络基础知识题,计算机网络基础知识试题及答案
- Spotfire中文教程
- 企业无线产品认证好吗
- 利用Python,通过关键字获取漏洞平台最新漏洞信息
- 音视频入门之如何绘制一张图片
- 远程视频监控之构思篇
- 微信小程序的运营与装修,简单几步掌握
- PVCBOT【21号】挑战者--人形机甲战士
- nvh个人检测下载_变速箱NVH质量检验系统.pdf
- python使用目录_python目录操作一
热门文章
- 数据库面试 - 如何设计才可以让系统从未分库分表动态切换到分库分表上?
- arp协议、arp应答出现的原因、arp应答过程、豁免ARP详细解答附图(建议电脑观看)
- 方法 注释_在IDEA中配置类和方法的文档注释
- leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)
- mac chrome 跨域
- 【Python】自动化升级所有pip安装的包
- 【Python】Python库之网络爬虫
- 在线编码工具_我希望在开始编码时就已经知道的工具
- 103_Power Pivot 透视表中空白标签处理及百分比
- 云服务器 存放 文件夹,云服务器 存放 文件夹