之前更新超链接的时候,忘了搭配实现一个下划线的功能,这篇文章就是来补上这一个功能,时间有点长,一方面没有很好的思路,一方面也没多少时间。

先在网上收集了一下下划线的实现操作,一种是在文本下再创建一个文本用来输入下划线,一种是在文本下再创建一个图片用来绘制下划线,这两种方式都相当容易理解,最开始都在考虑是否集成这两种方式,但是这里确实不适合应用到图文混排中,不断的生成资源,会大大地消耗性能。

最后,在参考前面的下划线的时候,想到只要自己将下划线的顶点数据获取到,更改为我们所需要的位置,添加到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图文混排(七) -- 下划线的更多相关文章

  1. Unity UGUI图文混排源码(三) -- 动态表情

    这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...

  2. Unity UGUI图文混排源码(二)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  3. Unity UGUI图文混排源码(一)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  4. Unity UGUI图文混排(六) -- 超链接

    图文混排更新到超链接这儿,好像也差不多了,不过就在最后一点,博主也表现得相当不专业,直接整合了山中双木林同学提供的超链接的解决方案,博主甚至没来得及细看就直接复制了,但感觉还是挺好用的. 博主已经将超 ...

  5. Unity UGUI图文混排(五) -- 一张图集对应多个Text

    继上一篇说的更新了一张图集对应多个Text的功能,为了节省资源嘛 这里,但是也没有舍弃之前的一个Text一个图集,因为我感觉应该两个都有用,于是我重新写了一个脚本 1.其实大体跟前面的都没变,解析标签 ...

  6. Unity UGUI图文混排源码(四) -- 聊天气泡

    这里有同学建议在做聊天气泡时,可以更改为一张图集对应多个Text,这样能节省资源,不过我突然想到每个Text一个图集,可以随时更换图集,这样表情图更丰富一些,于是我就先将现有的聊天demo改为了聊天气 ...

  7. [UGUI]图文混排(七):动态表情

    帧动画脚本: http://www.cnblogs.com/lyh916/p/9194823.html 这里的动态表情,我使用的是固定间隔去刷新Image上的Sprite来实现的,即帧动画.这里可以将 ...

  8. Unity琐碎(3) UGUI 图文混排解决方案和优化

    感觉使用Unity之后总能看到各种各样解决混排的方案,只能说明Unity不够体恤下情啊.这篇文章主要讲一下个人在使用过程中方案选择和优化过程,已做记录.顺便提下,开源很多意味着坑,还是要开实际需求. ...

  9. [UGUI]图文混排(二):Text源码分析

    UGUI源码: https://bitbucket.org/Unity-Technologies/ui/downloads/?tab=tags 首先下载一份UGUI源码,这里我下载的版本是5.3.2f ...

随机推荐

  1. further occurrences of HTTP header parsing errors will be logged at DEBUG level.错误

    今天进行项目测试的时候出现了further occurrences of HTTP header parsing errors will be logged at DEBUG level.错误,查了半 ...

  2. [LeetCode] Find Pivot Index 寻找中枢点

    Given an array of integers nums, write a method that returns the "pivot" index of this arr ...

  3. [LeetCode] Reshape the Matrix 重塑矩阵

    In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...

  4. Hibernate | Spring JPA | MySQL 使用过程遇到的一些问题

    1. 使用过程 2. 背景 3. 遇到问题 3.1 不指定Hibernate数据库方言,默认SQL生成方式 3.2 抛出异常Hibernate加入了@Transactional事务不会回滚 3.3 H ...

  5. 成也DP,败也DP(AFO?)

    不知道想说什么.. 从来没写过博客,markdown什么的也不会,凑合着看一下吧. 初中的时候开始搞OI,学了两个月后普及组爆零就退赛了. 初三直升的时候说每个人都要选竞赛,抱着混一混的心态选了信息, ...

  6. FZU 2157 树形DP

    最开始一直不理解题是什么意思 ╯▽╰ 题意:给出n个点,每个点都有两种花费,一个是0种花费,一个是1种花费,每两个点相连,边也有花费,是随着点所取话费的种类不同,边的花费也不同,边有四种花费,00,0 ...

  7. ●BZOJ 2669 [cqoi2012]局部极小值

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2669 题解: 容斥,DP,DFS 先看看 dp 部分:首先呢,X的个数不会超过 8个.个数很 ...

  8. [Codeforces]605E Intergalaxy Trips

    小C比较棘手的概率期望题,感觉以后这样的题还会贴几道出来. Description 给定一个n*n的邻接矩阵,邻接矩阵中元素pi,j表示的是从 i 到 j 这条单向道路在这一秒出现的概率百分比,走一条 ...

  9. [APIO/ctsc2007]

    A.风铃 给一棵二叉树,叶子结点是玩具,为使你的弟弟满意,你需要选一个满足下面两个条件的风铃: (1) 所有的玩具都在同一层(也就是说,每个玩具到天花板之间的杆的个数是一样的)或至多相差一层.(2) ...

  10. 【图文详解】linux下配置远程免密登录

    linux下各种集群搭建往往需要配置远程免密登录,本文主要描述了CentOs6.3系统下配置免密登录的详细过程. ssh远程登录,两种身份验证: 用户名+密码 密钥验证 机器1生成密钥对并将公钥发给机 ...