博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UGUI之修改Text之间的间距
阅读量:5097 次
发布时间:2019-06-13

本文共 3586 字,大约阅读时间需要 11 分钟。

using UnityEngine;using System.Collections;using UnityEngine.UI;using System.Collections.Generic;internal class Line{    //每行开始顶点索引    private int startVertexIndex;    public int StartVertexIndex    {        get        {            return startVertexIndex;        }    }    //每行结束顶点索引    private int endVertexIndex;    public int EndVertexIndex    {        get        {            return endVertexIndex;        }    }    //每行顶点总量    private int countVertexIndex;    public int CountVertexIndex    {        get        {            return countVertexIndex;        }    }    public Line(int startVertexIndex, int countVertexIndex)    {        this.startVertexIndex = startVertexIndex;        this.countVertexIndex = countVertexIndex;        this.endVertexIndex = this.startVertexIndex + countVertexIndex - 1;    }}/// /// 这是设置字体移动的核心类/// 执行多重行移动的核心算法是:将多重行分开依次进行处理,每一行的处理都是前面对单行处理的子操作/// 但是由vh是记录一个文本中所有的字的顶点,所以说需要分清楚每行开始,每行结束,以及行的字个数,/// 如此需要创建一个行的数据结构,以保存这些信息/// [AddComponentMenu("UI/Effects/TextSpacing")]public class TextSpacing : BaseMeshEffect{    public float spacing = 0;    public override void ModifyMesh(VertexHelper vh)    {        Text text = GetComponent
(); string[] ls = text.text.Split('\n'); int length = ls.Length; bool isNewLine = false; Line[] line; if (string.IsNullOrEmpty(ls[ls.Length - 1]) == true) { line = new Line[length - 1]; isNewLine = true; } else { line = new Line[length]; } //Debug.Log("ls长度" + ls.Length); for (int i = 0; i < line.Length; i++) { if (i == 0 && line.Length == 1 && isNewLine == false)//解决单行时没有换行符的情况 { line[i] = new Line(0, ls[i].Length * 6); break; } if (i == 0 && line.Length >= 1)//解决单行时有换行符的情况,以及多行时i为0的情况 { line[i] = new Line(0, (ls[i].Length + 1) * 6); } else { if (i < line.Length - 1) { line[i] = new Line(line[i - 1].EndVertexIndex + 1, (ls[i].Length + 1) * 6); } else { if (isNewLine == true)//解决多行时,最后一行末尾有换行符的情况 { line[i] = new Line(line[i - 1].EndVertexIndex + 1, (ls[i].Length + 1) * 6); } else { line[i] = new Line(line[i - 1].EndVertexIndex + 1, ls[i].Length * 6); } } } } List
vertexs = new List
(); vh.GetUIVertexStream(vertexs); int countVertexIndex = vertexs.Count; //Debug.Log("顶点总量" + vertexs.Count); for (int i = 0; i < line.Length; i++) { if (line[i].CountVertexIndex == 6) { continue; } for (int k = line[i].StartVertexIndex + 6; k <= line[i].EndVertexIndex; k++) { UIVertex vertex = vertexs[k]; vertex.position += new Vector3(spacing * ((k - line[i].StartVertexIndex) / 6), 0, 0); //Debug.Log("执行"); vertexs[k] = vertex; if (k % 6 <= 2) { vh.SetUIVertex(vertex, (k / 6) * 4 + k % 6); } if (k % 6 == 4) { vh.SetUIVertex(vertex, (k / 6) * 4 + k % 6 - 1); } } } }}

 

转载于:https://www.cnblogs.com/weiqiangwaideshijie/p/10593519.html

你可能感兴趣的文章
[网络流24题] 最长k可重区间集问题 (费用流)
查看>>
路径依赖理论
查看>>
ActiveX多线程回调JavaScript
查看>>
剑指offer系列32-----对称二叉树的判断
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
Laravel-redis-订阅发布
查看>>
Weka SMO
查看>>
codeforces305A
查看>>
java服务器热部署的原理
查看>>
js精确计算
查看>>
oc __weak和__strong的区别
查看>>
Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误
查看>>
Eclipse怎么样添加智能感知提示功能(含Windows版和Mac版)
查看>>
搜索引擎与开发
查看>>
CRM2011 linq 查询
查看>>
13个小技巧帮你征服Xcode
查看>>
PowerShell基础
查看>>
linux操作技巧
查看>>
Redis文章链接
查看>>