CombiningMultipleMeshesinUnity3DandPreservingMaterials,由单个子网格组成。现在,我想创建一个新网格,其中包含例如每个(A、B和C)网格的10个实例,并且它将包含3个子网格,一个用于每种类型的所有元素。为此,我使用“Mesh.CombineMeshes(...)”,但它将所有网格组合成一个子网格或为每个元素创建子网格(在我的例子中是30个子网格)。这两种结果都是我无法接受的。您可以先将所有类型A的网格合并到mesh1,将所有类型B的网格合并到mesh2,将所有类型C的网格合并到mesh3,并设置mergeSubMeshes=true。然后,您只需使用mergeSubMeshes=false将网格1、2和3组合成一个网格,就可以得到一个包含3个子网格的单个网格,每个子网格都由一种类型的网格构建,如您所愿。MeshFilter.sharedMesh可用于按类型对网格进行分组。这是代码:以上是C#学习教程:Unity3D中合并多个网格,保留材质共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注—MeshCombineMeshes(MeshFilter[]meshes){//Key:sharedmeshinstanceID,Value:argumentstocombinemeshesvarhelper=newDictionary>();//为每种类型的网格构建组合实例foreach(varminmeshes){Listtmp;if(!helper.TryGetValue(m.sharedMesh.GetInstanceID(),outtmp)){tmp=newList();helper.Add(m.sharedMesh.GetInstanceID(),tmp);}varci=newCombineInstance();ci.mesh=m.sharedMesh;ci.transform=m.transform.localToWorldMatrix;tmp.Add(ci);}//组合网格并为组合网格构建组合实例varlist=newList();einhelper){varm=newMesh();m.CombineMeshes(e.Value.ToArray());varci=newCombineInstance();ci.mesh=m;列表.Add(ci);}//现在组合所有内容varresult=newMesh();结果。CombineMeshes(list.ToArray(),false,false);//现在清理未使用的网格是个好主意每个(列表中的变量m){销毁(m.mesh);}返回结果;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
