using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class CombineMesh : MonoBehaviour
{
public GameObject[] Fillters;
void Start()
{
Mesh mesh = new Mesh();
List<CombineInstance> combines = new List<CombineInstance>();
List<Material> materials = new List<Material>();
for (int i = 0; i < Fillters.Length; i++)
{
CombineInstance combine = new CombineInstance();
combine.mesh = Fillters[i].GetComponent<MeshFilter>().mesh;
combine.transform = Fillters[i].transform.localToWorldMatrix;
//保存网格信息
combines.Add(combine);
//保存贴图信息
materials.Add(Fillters[i].GetComponent<MeshRenderer>().material);
}
//合并子网格
//使用两个独立的材质球,添加false以保留子网格
mesh.CombineMeshes(combines.ToArray(),false);
//绘制网格
GetComponent<MeshFilter>().mesh = mesh;
//添加贴图
GetComponent<MeshRenderer>().materials = materials.ToArray();
}
}
第28行中的false的作用为是是否合并子网格,默认为true
默认情况下所有网格将合并为同一个物体,使用同一张贴图
当合并多个物体但需要使用不同贴图时需要改为false,此时将保留每个子网格的独立渲染
每有一个贴图便会分别为子网格进行渲染