Unity UGUI图文混排(七) -- 下划线
来源:互联网 发布:linux更改工作目录 编辑:程序博客网 时间:2024/05/16 06:35
之前更新超链接的时候,忘了搭配实现一个下划线的功能,这篇文章就是来补上这一个功能,时间有点长,一方面没有很好的思路,一方面也没多少时间。
先在网上收集了一下下划线的实现操作,一种是在文本下再创建一个文本用来输入下划线,一种是在文本下再创建一个图片用来绘制下划线,这两种方式都相当容易理解,最开始都在考虑是否集成这两种方式,但是这里确实不适合应用到图文混排中,不断的生成资源,会大大地消耗性能。
最后,在参考前面的下划线的时候,想到只要自己将下划线的顶点数据获取到,更改为我们所需要的位置,添加到Text中,就可以完成了,以下就是相关的实现步骤:
1.首先写了一个添加下划线的函数,_VToFill为当前Text的VertexHelper,_VTUT为下划线的顶点数据,总共四个点,_VStartPos和_VEndPos为下划线所在的初始和结束位置,具体的实现内容,参照OnPopulateMesh函数里面添加UIVertexQuad的功能
#region 添加下划线 void AddUnderlineQuad(VertexHelper _VToFill, IList<UIVertex> _VTUT, Vector3 _VStartPos, Vector3 _VEndPos) { Vector3[] _TUnderlinePos = new Vector3[4]; _TUnderlinePos[0] = _VStartPos; _TUnderlinePos[1] = _VEndPos; _TUnderlinePos[2] = _VEndPos + new Vector3(0, fontSize * 0.2f, 0); _TUnderlinePos[3] = _VStartPos + new Vector3(0, fontSize * 0.2f, 0); for (int i = 0; i < 4; ++i) { int tempVertsIndex = i & 3; m_TempVerts[tempVertsIndex] = _VTUT[i % 4]; m_TempVerts[tempVertsIndex].color = Color.blue; m_TempVerts[tempVertsIndex].position = _TUnderlinePos[i]; if (tempVertsIndex == 3) _VToFill.AddUIVertexQuad(m_TempVerts); } }#endregion2.在OnPopulateMesh的函数中,实现超链接包围盒下面,获取下划线的顶点数据,然后借用包围盒的的相关数据,就不需要自己再去计算我们所需要相关的位置信息,再调用开始的添加下划线的函数。
超链接的实现参考上一篇文章:http://blog.csdn.net/qq992817263/article/details/52919610
#region 处理超链接的下划线--拉伸实现 TextGenerator _UnderlineText = new TextGenerator(); _UnderlineText.Populate("_", settings); IList<UIVertex> _TUT = _UnderlineText.verts; foreach (var hrefInfo in m_HrefInfos) { if (hrefInfo.startIndex >= toFill.currentVertCount) { continue; } for (int i = 0; i < hrefInfo.boxes.Count; i++) { Vector3 _StartBoxPos = new Vector3(hrefInfo.boxes[i].x, hrefInfo.boxes[i].y, 0.0f); Vector3 _EndBoxPos = _StartBoxPos + new Vector3(hrefInfo.boxes[i].width, 0.0f, 0.0f); AddUnderlineQuad(toFill, _TUT, _StartBoxPos, _EndBoxPos); } }#endregion3.这里的下划线我是直接是实现在超链接下面,没有单独作为一个功能,会不会独立后面再考虑吧,效果截图:
4.相关问题,这里为了不浪费性能,在一个超链接下面是不断拉伸的一个下划线,于是如果超链接文字过长会出现如图片的情况,我不知道真正在使用中是否会默认这种情况,如果有更好的解决方案,也可以提交给我
5.工程链接:https://github.com/coding2233/TextInlineSprite
后续,我会在github上持续更改一些功能或者操作上的一些问题,欢迎star和fork
1 0
- Unity UGUI图文混排(七) -- 下划线
- Unity UGUI实现图文混排
- Unity UGUI图文混排源码(一)
- Unity UGUI图文混排源码(二)
- Unity UGUI图文混排(六) -- 超链接
- Unity UGUI图文混排源码(三) -- 动态表情
- Unity UGUI图文混排源码(四) -- 聊天气泡
- Unity琐碎(3) UGUI 图文混排解决方案和优化
- Unity UGUI图文混排源码--优化版
- Unity UGUI图文混排源码--优化版
- Unity UGUI图文混排(五) -- 一张图集对应多个Text
- unity NGUI图文混排
- Unity3D 基于UGUI的图文混排组件
- CoreText(七):图文混排
- Android富文本图文混排、粗体、斜体、图片、下划线、删除线等
- 图文混排
- 图文混排
- 图文混排
- Android Studio 生成Setter / Getter
- c# 去掉DataTable中重复行
- 使用jQuery实现鼠标滑过图片移动特效
- 设置 Linux 的 LD_LIBRARY_PATH 变量
- electron开发记录(四):electron中组件的一些用法
- Unity UGUI图文混排(七) -- 下划线
- Java设计模式----单例模式(Singleton)
- wonderware配置-Intouch读取Historian数据 8
- adb端口被占用导致无法启动
- Linux下长时间ping网络加时间戳并记录到文本
- sqlite DatabaseUtils
- excel导入,用反射匹配字段名
- iOS ——微信支付
- 习艺先习德01