问题描述:倒计时使用系统默认字体,左对齐中。在0到1的时候1字体的三角面窄会向左侧的0靠近,影响用户体验。最好是能固定显示,而不是看起来向数字跳动一样。
解决方式:---美术画一套字体
---使用5个GameObject。
---代码控制-增加一点点性能
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[AddComponentMenu("UI/Effects/TextSetting")]
public class TestSetting : BaseMeshEffect
{
private List<Vector3> list02;
protected override void OnEnable()
{
list02 = new List<Vector3>();
}
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive()||vh.currentIndexCount==0)
{
return;
}
#if UNITY_EDITOR
Text tt= GetComponent<Text>();
Debug.Log("text name:" + tt.name);
Debug.Log("text txt:"+tt.text+" length->"+tt.text.Length);
#endif
List<UIVertex> vertexs = new List<UIVertex>();
vh.GetUIVertexStream(vertexs);
int indexCount = vh.currentIndexCount;
UIVertex vt;
UIVertex vt0;
UIVertex vt1;
Vector3 offsetCenter;
if (list02.Count == 0)
{
for (int i = 0; i < indexCount; i++)
{
if (i % 3 == 0 && i % 6 == 0)
{
vt0 = vertexs[i];
vt1 = vertexs[i + 2];
offsetCenter = new Vector3((vt0.position.x + vt1.position.x) * 0.5f, 0, 0);
list02.Add(offsetCenter);
}
}
}
List<Vector3> list01 = new List<Vector3>();
int j;
for (int i = 0; i < indexCount; i++)
{
vt = vertexs[i];
j = i / 6;
if (i % 3 == 0 && i % 6 == 0)
{
vt0 = vertexs[i];
vt1 = vertexs[i + 2];
offsetCenter = new Vector3((vt0.position.x + vt1.position.x) * 0.5f, 0, 0);
list01.Add(offsetCenter);
}
Vector3 poffset = list02[j] - list01[j];
vt.position += poffset;
vertexs[i] = vt;
if (i % 6 <= 2)
{
vh.SetUIVertex(vt, (i / 6) * 4 + i % 6);
}
if (i % 6 == 4)
{
vh.SetUIVertex(vt, (i / 6) * 4 + i % 6 - 1);
}
}
}
}