1、合并两个cube,认识submesh
2、代码如下:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CombineMesh : MonoBehaviour
{
void Start()
{
Matrix4x4 matrix = transform.worldToLocalMatrix;
//网格数组
MeshFilter[] meshFilters = this.GetComponentsInChildren<MeshFilter>();
CombineInstance[] combineInstances = new CombineInstance[meshFilters.Length];
for(int i=0;i<meshFilters.Length;++i)
{
combineInstances[i].mesh = meshFilters[i].sharedMesh;
combineInstances[i].transform = meshFilters[i].transform.localToWorldMatrix * matrix;
}
//材质数组
Material[] materials = new Material[meshFilters.Length];
MeshRenderer[] meshRenders = this.GetComponentsInChildren<MeshRenderer>();
for(int i=0;i<meshRenders.Length;++i)
{
materials[i] = meshRenders[i].sharedMaterial;
}
//新建网格容器
Mesh newMesh = new Mesh();
newMesh.name = "newMesh";
//新网格赋值给当前mesh
MeshFilter mf = this.GetComponent<MeshFilter>();
mf.mesh = newMesh;
//合并网格
newMesh.CombineMeshes(combineInstances, false); //第二个参数的意思,如果为false,则表明有多个材质;如果是true,则表明一个材质。
//如果是false的话,合并完的Mesh,那么就会有多个submesh,理应对应多个Material。
//如果是true的话,那么合并完的mesh就只有一个submesh,理应对对应1个Material。
//材质赋值
MeshRenderer mr = this.GetComponent<MeshRenderer>();
mr.sharedMaterials = materials;
}
}
3、合并结果:
Cube1和Cube2位两个合并的对象。上面的脚本,挂在第一个Cube1上。运行程序,可以得到:
新的网格,赋值给了Cube1,此时,可以将Cube2删除也是可以的。点击新网格,信息为:
现在Cube1就有了两个submeshes。
说明,当只有一个mesh的时候,只需要一个material,如果有多个的话,则unity会报出警告提示: