Mesh合并


直接看代码

public class MeshTool {
        [MenuItem("Tools/Mesh/Combine")]
        public static void MeshCombine()
        {
            GameObject obj = (GameObject)Selection.activeObject; //场景中选择的物体
            MeshFilter[] filters = obj.GetComponentsInChildren(); // 获取子物体的MeshFilter

            CombineInstance[] combiners = new CombineInstance[filters.Length]; // 根据子物体的MeshFilter数量来创建CombineInstance数组

            for (int i = 0; i < filters.Length; i++)
            {
                combiners[i].mesh = filters[i].sharedMesh;
                combiners[i].transform = obj.transform.worldToLocalMatrix * filters[i].transform.localToWorldMatrix; // 这里其实不是transform 组件上的transform,其实算是一种作表转换
            }

            Mesh finalMesh = new Mesh(); // 创建一个新的mesh
            finalMesh.CombineMeshes(combiners);// 将数组中的mesh合并到finalMesh这一个数组中

            obj.GetComponent().sharedMesh = finalMesh;// 赋值
            Mesh mesh = obj.GetComponent().sharedMesh;
            AssetDatabase.CreateAsset(mesh, "Assets/" + "test" + ".asset"); // 将新的mesh 信息保存到本地
        }
    }