uGUI中就三个基本的UI组件
Text,
Image,
RawImage,它们都继承自
Graphic组件,查看
Graphic组件源码可以发现,显示这些UI组件时分为好几个步骤,其中包括了
- 当组件参数改变时,重新生成顶点列表
- 获取组件当前节点上继承了IMeshModifier接口的组件,对生成的顶点列表进行修改
- 使用生成的顶点列表填充网格
uGUI的
Shadow和
Outline就继承IMeshModifier接口,简单的把UI组件生成的顶点列表复制若干遍再进行位置偏移,以达到阴影或外轮廓的效果
所以要查看UI组件生成的顶点数,可以将下面的脚本挂到UI节点上
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIVertexDebug : BaseMeshEffect
{
public override void ModifyMesh(VertexHelper vh)
{
List<UIVertex> verts = new List<UIVertex>();
vh.GetUIVertexStream(verts);
Debug.Log(verts.Count);
}
}
可以发现一个Simple类型的
Image组件就6个顶点,一个Sliced类型的
Image组件54个顶点, 而
Text组件中的1个字符就会生成6个顶点,如果加了
Outline,则顶点数会翻5倍
稍微修改上面的代码
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIVertexDebug : BaseMeshEffect
{
public Mesh mesh = null;
public override void ModifyMesh(VertexHelper vh)
{
List<UIVertex> verts = new List<UIVertex>();
vh.GetUIVertexStream(verts);
Debug.Log(verts.Count);
if (mesh == null)
{
mesh = new Mesh();
}
vh.FillMesh(mesh);
}
}
在Unity中添加一个新的Inspector面板,双击Mesh,点击新的Inspector面板右上角的锁锁住该面板,就可以实时查看节点上UI组件生成的网格信息了