using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class combinemesh : MonoBehaviour
{
// Use this for initialization
void Start()
{
combineMesh();
}
// Update is called once per frame
void Update()
{
}
void combineMesh()
{
MeshFilter[] meshfilter = GetComponentsInChildren<MeshFilter>();//获取所有子物体的mesh fileter
CombineInstance[] combineinstance = new CombineInstance[meshfilter.Length];//创建一个combineInstance 用于存储合并的
MeshRenderer[] meshrender = GetComponentsInChildren<MeshRenderer>();//获取所有子辈的mesh render
Material[] mats = new Material[meshrender.Length]; //并创建材质球
for (int i = 0; i < meshfilter.Length; i++)
{
mats[i] = meshrender[i].material;
combineinstance[i].mesh = meshfilter[i].sharedMesh;//将网格信息复制给conbineinstance
combineinstance[i].transform = meshfilter[i].transform.localToWorldMatrix;//位置信息也是一样赋值给combineinstance
if (meshfilter[i].gameObject.name != gameObject.name)
{
Destroy(meshfilter[i].gameObject);
}
// meshfilter[i].gameObject.SetActive(false);
}
// transform.GetComponent<MeshFilter>().mesh = new Mesh();//获取自身的
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combineinstance, true);//这里第二个参数要设置为true 否则如果材质不同,物体都会使用所挂脚本物体的材质
transform.GetComponent<MeshRenderer>().sharedMaterials = mats;//把合并后的材质球赋值给meshrender
transform.gameObject.SetActive(true);
}
}