//是否公用材质
public bool IsShareMat = true;
// Use this for initialization
void Start ()
{
MargeMeshMethod();
}
// Update is called once per frame
void Update ()
{
}
/// <summary>
/// 合并网格
/// </summary>
public void MargeMeshMethod()
{
//获取材质
MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();
Material[] mats = new Material[meshRenderers.Length];
for (int i = 0; i < meshRenderers.Length; i++)
{
mats[i] = meshRenderers[i].sharedMaterial;
}
//获取子物体网格
MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
//创建mesh信息存储数组
CombineInstance[] combineInstances = new CombineInstance[meshFilters.Length];
//遍历
for (int i = 0; i < meshFilters.Length; i++)
{
//将mesh,赋值
combineInstances[i].mesh = meshFilters[i].sharedMesh;
//本地坐标转矩阵,赋值
combineInstances[i].transform = meshFilters[i].transform.localToWorldMatrix;
meshFilters[i].gameObject.SetActive(false);
}
// MeshRenderer mr = gameObject.AddComponent<MeshRenderer>();
// MeshFilter mf = gameObject.AddComponent<MeshFilter>();
// mf.mesh = new Mesh();
// mf.mesh.CombineMeshes( combineInstances, false );
// gameObject.SetActive( true );
// mr.sharedMaterials = mats;
//声明一个新网格对象
Mesh newMesh = new Mesh();
//将combineinstance数组传入函数
newMesh.CombineMeshes(combineInstances,false);
//给当前空物体添加材质和网格组建,将合并后的网格,给到自身网格
gameObject.AddComponent<MeshFilter>().sharedMesh = newMesh;
if (IsShareMat)
gameObject.AddComponent<MeshRenderer>().sharedMaterial = mats[0];
else
gameObject.AddComponent<MeshRenderer>().sharedMaterials = mats;
//gameObject.AddComponent<MeshCollider>().convex = true;
//gameObject.AddComponent<MeshCollider>().sharedMesh = newMesh;
}
注意:1.模型源需要勾选write/read
2.object不要勾选static