前言
上一篇《Unity Text 描边和阴影的实现》探讨了Text的描边和阴影扩展,但实际使用下来发现字符左右都粘在一起了,没有了间距空间。这个问题的原因也是显而易见的,由于我们向外扩展了UV,增加了描边的空间却没有移动字符的真正位置,所以一但描边后就粘在一起了。解决的办法就是先移动字符的位置,再执行描边或阴影的逻辑,这样就完美的解决了间距问题。
一、偏移顶点代码
在原来修改顶点的方法中,增加向右偏移的代码,如图:
public int XSpacing = 0;
/// <summary>
/// 修改顶点
/// </summary>
/// <param name="vh"></param>
public override void ModifyMesh(VertexHelper vh)
{
List<UIVertex> allVertexs = null;
if(XSpacing > 0)
{//处理字符间距
var vertexs = new List<UIVertex>();
vh.GetUIVertexStream(vertexs);
for(var i = 0; i < vertexs.Count; i++)
{
var v = vertexs[i];
v.position += new Vector3(XSpacing * (i / 6), 0, 0);
vertexs[i] = v;
if(i % 6 <= 2)
{
vh.SetUIVertex(v, (i / 6) * 4 + i % 6);
}
if( i % 6 == 4)
{
vh.SetUIVertex(v, (i / 6) * 4 + i % 6 - 1);
}
}
}
if (Shadow)
{//处理阴影
allVertexs = new List<UIVertex>();
var vertexs = ProcessShadowVertices(vh);
allVertexs.AddRange(vertexs);
}
if (OutlineWidth > 0)
{//处理描边
if(allVertexs == null)
allVertexs = new List<UIVertex>();
var vertexs = ProcessOutlineVertices(vh);
allVertexs.AddRange(vertexs);
}
if(allVertexs != null && allVertexs.Count > 0)
{
vh.Clear();
vh.AddUIVertexTriangleStream(allVertexs);
}
}
二、效果测试
未设置间距前,如图:
设置间距后,如图:
面板属性如图:
感谢阅读!