Unity UGUI图文混排(七) -- 下划线
之前更新超链接的时候,忘了搭配实现一个下划线的功能,这篇文章就是来补上这一个功能,时间有点长,一方面没有很好的思路,一方面也没多少时间。
先在网上收集了一下下划线的实现操作,一种是在文本下再创建一个文本用来输入下划线,一种是在文本下再创建一个图片用来绘制下划线,这两种方式都相当容易理解,最开始都在考虑是否集成这两种方式,但是这里确实不适合应用到图文混排中,不断的生成资源,会大大地消耗性能。
最后,在参考前面的下划线的时候,想到只要自己将下划线的顶点数据获取到,更改为我们所需要的位置,添加到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);
}
}
#endregion
2.在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);
} }
#endregion
3.这里的下划线我是直接是实现在超链接下面,没有单独作为一个功能,会不会独立后面再考虑吧,效果截图:
4.相关问题,这里为了不浪费性能,在一个超链接下面是不断拉伸的一个下划线,于是如果超链接文字过长会出现如图片的情况,我不知道真正在使用中是否会默认这种情况,如果有更好的解决方案,也可以提交给我
5.工程链接:https://github.com/coding2233/TextInlineSprite
后续,我会在github上持续更改一些功能或者操作上的一些问题,欢迎star和fork
Unity UGUI图文混排(七) -- 下划线的更多相关文章
- Unity UGUI图文混排源码(三) -- 动态表情
这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...
- Unity UGUI图文混排源码(二)
Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...
- Unity UGUI图文混排源码(一)
Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...
- Unity UGUI图文混排(六) -- 超链接
图文混排更新到超链接这儿,好像也差不多了,不过就在最后一点,博主也表现得相当不专业,直接整合了山中双木林同学提供的超链接的解决方案,博主甚至没来得及细看就直接复制了,但感觉还是挺好用的. 博主已经将超 ...
- Unity UGUI图文混排(五) -- 一张图集对应多个Text
继上一篇说的更新了一张图集对应多个Text的功能,为了节省资源嘛 这里,但是也没有舍弃之前的一个Text一个图集,因为我感觉应该两个都有用,于是我重新写了一个脚本 1.其实大体跟前面的都没变,解析标签 ...
- Unity UGUI图文混排源码(四) -- 聊天气泡
这里有同学建议在做聊天气泡时,可以更改为一张图集对应多个Text,这样能节省资源,不过我突然想到每个Text一个图集,可以随时更换图集,这样表情图更丰富一些,于是我就先将现有的聊天demo改为了聊天气 ...
- [UGUI]图文混排(七):动态表情
帧动画脚本: http://www.cnblogs.com/lyh916/p/9194823.html 这里的动态表情,我使用的是固定间隔去刷新Image上的Sprite来实现的,即帧动画.这里可以将 ...
- Unity琐碎(3) UGUI 图文混排解决方案和优化
感觉使用Unity之后总能看到各种各样解决混排的方案,只能说明Unity不够体恤下情啊.这篇文章主要讲一下个人在使用过程中方案选择和优化过程,已做记录.顺便提下,开源很多意味着坑,还是要开实际需求. ...
- [UGUI]图文混排(二):Text源码分析
UGUI源码: https://bitbucket.org/Unity-Technologies/ui/downloads/?tab=tags 首先下载一份UGUI源码,这里我下载的版本是5.3.2f ...
随机推荐
- [LeetCode] Maximum Swap 最大置换
Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...
- 实战分享:如何成功防护1.2T国内已知最大流量DDoS攻击
作者:腾讯云宙斯盾安全团队&腾讯安全平台部 引言: DDoS攻击势头愈演愈烈,除了攻击手法的多样化发展之外,最直接的还是攻击流量的成倍增长.3月份国内的最大规模DDoS攻击纪录还停留在数百G规 ...
- pyqt5 动画学习(三) 指定控件的移动轨迹
这一篇来讲解自定义控件的移动轨迹 原理:我们采用QPainterPath先画一个弧线,然后加载一个物体让物体移动,设置100个关键帧,每个关键帧物体的坐标位置就是弧线的坐标位置,这样就能达到按照指定轨 ...
- Python3玩转儿 机器学习(2)
机器学习的基本任务 分类任务 回归任务 分类任务 手写输入数字识别 分类任务: 二分类任务 判断邮件是垃圾邮件或者不是垃圾邮件 判断发放给客户信用卡有风险或者没有风险 判断病患良性肿瘤还是恶性肿瘤 判 ...
- [Awson原创]网络(network)
Description Awson是某国际学校信竞组的一只菜鸡.学校为了使教育信息化,打算在学校内新建机房,并且为机房联网.但吝啬的学校又不想花费过多的开销,于是将规划 网络路线的任务交给了信竞组的A ...
- [SDOI2016]游戏
Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,Alice 会 ...
- 【NOIP2017 OFO】
·奇怪的标题可能预示着这一篇博文不是讲算法或者分享题目的吧. [一只情绪化的兔子] 今年的11月12日出奇地比去年温暖.两场比赛结束后的我们在临走前去尝试了OFO共享单车,在成都电子科技大学 ...
- ●POJ 3348 Cows
题链: http://poj.org/problem?id=3348 题解: 计算几何,凸包,多边形面积 好吧,就是个裸题,没什么可讲的. 代码: #include<cmath> #inc ...
- 最小公共祖先 (Tarjan) POJ1470
POJ 1470 标准的LCA,输入感觉怪怪的=.= 自己看了下Tarjan,再参考了下别人的处理方法(感觉自己好弱..) #include <iostream> #include < ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...