類 Mesh
方法 public void CombineMeshes(CombineInstance[] combine)
例 mesh.CombineMeshes(combine)
1.參數combine 的數組長度不能大於int16, 如有大量Mesh需要合並, 需要分批次進行
2.mesh中原有的Mesh將會被combine 中Mesh所代替, 所以如果希望保留調用者Mesh中的mesh數據, 需要一並放進combine 數組中, 並在調用CombineMeshes方法之前為原mesh引用創建新的實例
下面的例子展示了創建4個cube: [g0, g1, g2, g3], 並將g1g2g3的模型合並到g0上, (注意: 本次合並操作對g1g2g3本身並無影響, 合並后的g0將會有4個cube模型)
void Awake () { GameObject g0 = GameObject.CreatePrimitive(PrimitiveType.Cube); GameObject g1 = GameObject.CreatePrimitive(PrimitiveType.Cube); g1.transform.position = new Vector3(10, 0, 0); GameObject g2 = GameObject.CreatePrimitive(PrimitiveType.Cube); g2.transform.position = new Vector3(0, 10, 0); GameObject g3 = GameObject.CreatePrimitive(PrimitiveType.Cube); g3.transform.position = new Vector3(0, 0, 10); mergerCombine(g0, g1); mergerCombine(g0, g2); mergerCombine(g0, g3); } void mergerCombine(GameObject ori, GameObject tar) { MeshFilter[] meshFilters1 = ori.GetComponents<MeshFilter>(); MeshFilter[] meshFilters2 = tar.GetComponents<MeshFilter>(); MeshFilter[] meshFilters = new MeshFilter[meshFilters1.Length + meshFilters2.Length]; meshFilters1.CopyTo(meshFilters, 0); meshFilters2.CopyTo(meshFilters, meshFilters1.Length); CombineInstance[] combine = new CombineInstance[meshFilters.Length]; for (int i = 0; i < meshFilters.Length; i++) { combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = meshFilters[i].transform.localToWorldMatrix; } ori.transform.GetComponent<MeshFilter>().mesh = new Mesh(); ori.transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine); }