网格组合是将 Unity 中的多个对象组合为一个对象的技术。因此,在多物体的场景中,使用网格组合,会有效的减少小网格的数量,最终将得到一个包含许多小网格的大网格游戏对象,这将提高游戏或模拟器的性能。在Unity 的 “Statistics” 窗口中的批次数量来衡量是否有效,批次越少越好。
首先搭建如下一个场景:
可以看到有24k Batchs,在FrameDebug中显示如下:没有组合网格前时调用了五次绘制物体。
添加组合网格代码,将脚本挂载到root物体上
void Start()
{
MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
CombineInstance[] combine = new CombineInstance[meshFilters.Length];
int i = 0;
while (i < meshFilters.Length)
{
combine[i].mesh = meshFilters[i].sharedMesh;
combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
meshFilters[i].gameObject.SetActive(false);
i++;
}
Mesh mesh = new Mesh();
mesh.CombineMeshes(combine);
transform.GetComponent<MeshFilter>().sharedMesh = mesh;
transform.gameObject.SetActive(true);
}
Batches变成了9
在FrameDebug中,只调用了一次父物体的绘制。
参考链接:
Unity - 脚本 API:Mesh.CombineMeshes (unity3d.com)