UGUI居中打字机(利用顶点计算)

上次写的富文本打字机,原理是文字一个一个出现。

这种原理实现的打字机效果是不支持居中打字机的。

为了解决这个问题,最好的实现方式是所有的文字从开始就已经排版好,只是不显示而已。
然后利用顶点的递增达到文字一个一个出现的目的。

下面是GIF示例图,也支持富文本(gif的logo去不掉,不是打广告,哈哈)
在这里插入图片描述

原理简单说明

  • 脚本继承于BaseMeshEffect,重写 public override void ModifyMesh方法来自定义显示顶点数量。
  • 在Unity2019中,顶点计算不再将富文本考虑进去,所以可以随着时间数量增加即可
  • 但是在低于2019版本中(比如Unity2017),富文本的顶点也必须考虑进去。
  • 所以利用正则表达式匹配富文本的符号所在index "<[^>]*>[^<]*</[^>]*>"
  • 剩下的即为文字区域,也可以进行正则匹配 ">(.|\n)*<" 回车符号记得考虑进去
  • 脚本再update时,处于富文本符号区域则直接while循环,下面为实例代码
if (richPosList.Contains(m_Num))
                            {
#if UNITY_2019
                                //2019版本顶点计算方法改了,不需要再额外计算富文本的顶点
#else
                                    while (richPosList.Contains(m_Num))
                                    {
                                        m_Num++;
                                    }
#endif
                                m_Num++;
                            }
                            else
                            {
                                m_Num++;
                            }

得到的m_Num用来重新计算顶点

public override void ModifyMesh(VertexHelper vh)
    {
        if (!IsActive())
            return;

        List<UIVertex> vertexList = new List<UIVertex>();
        vh.GetUIVertexStream(vertexList);

        vertexList = SetTextVertex(vertexList);

        vh.Clear();

        vh.AddUIVertexTriangleStream(vertexList);
    }

    List<UIVertex> tmpVertexList = new List<UIVertex>();

    private List<UIVertex> SetTextVertex(List<UIVertex> vertexList)
    {
        tmpVertexList.Clear();
        int count = m_Num * 6;
        count = Mathf.Min(vertexList.Count, count);
        for (int i = 0; i < count; i++)
        {
            tmpVertexList.Add(vertexList[i]);
        }

        return tmpVertexList;
    }

最终会随着时间逐步添加文字,达到居中打字的效果
觉得我分享的对大家有用的话,记得点个赞哦,谢谢

文件下载链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值