using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
using System.Collections.Generic;
public struct Line
{
private int _startVertexIndex ;
///
/// 起点索引
///
public int StartVertexIndex
{
get { return _startVertexIndex; }
}
private int _endVertexIndex;
///
/// 终点索引
///
public int EndVertexIndex
{
get { return _endVertexIndex; }
}
private int _vertexCount;
///
/// 该行占的点数目
///
public int VertexCount
{
get { return _vertexCount; }
}
public Line(int startVertexIndex, int length)
{
_startVertexIndex = startVertexIndex;
_endVertexIndex = length * 6 - 1 + startVertexIndex;
_vertexCount = length * 6;
}
}
[AddComponentMenu("UI/Effects/UITextSpacing")]
public class UITextSpacing : BaseMeshEffect
{
public float _textSpacing = 1f;
private UIVertex vt;
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive() || vh.currentVertCount == 0)
{
return;
}
Text text = GetComponent();
if (text == null)
{
Debug.LogError("Missing Text component");
return;
}
// List vertexs = new List();
// vh.GetUIVertexStream(vertexs);
int indexCount = vh.currentIndexCount;
string[] lineTexts = text.text.Split('\n');
Line[] lines = new Line[lineTexts.Length];
//根据lines数组中各个元素的长度计算每一行中第一个点的索引,每个字、字母、空母均占6个点
for (int i = 0; i < lines.Length; i++)
{
//除最后一行外,vertexs对于前面几行都有回车符占了6个点
if (i == 0)
{
lines[i] = new Line(0, lineTexts[i].Length + 1);
}
else if (i > 0 && i < lines.Length - 1)
{
lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length + 1);
}
else
{
lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length);
}
}
for (int i = 4; i < vh.currentVertCount; i++)
{
vh.PopulateUIVertex(ref vt, i);
vt.position += new Vector3(_textSpacing * (i / 4 + 1), 0, 0);
vh.SetUIVertex(vt, i);
}
// for (int i = 0; i < lines.Length; i++)
// {
// for (int j = lines[i].StartVertexIndex + 6; j <= lines[i].EndVertexIndex; j++)
// {
// if (j < 0 || j >= vh.currentVertCount)
// {
// continue;
// }
//
// int index = 0;
// if (j % 6 <= 2)
// {
// index = (j / 6) * 4 + j % 6;
//
// }
// if (j % 6 == 4)
// {
// index = (j / 6) * 4 + j % 6 - 1;
//
// }
// vh.PopulateUIVertex(ref vt,index);
// vt.position += new Vector3(_textSpacing * ((j - lines[i].StartVertexIndex) / 6), 0, 0);
//
// //以下注意点与索引的对应关系
// vh.SetUIVertex(vt, index);
// }
// }
}
}