/** * 1.需要清除相同顶点则清除 * 2.将新生成的mesh,赋给当前GameObject */ private void Apply() { if (removeDuplicateVertices) { _maker.RemoveDoubles(); } #if UNITY_EDITOR if (!Application.isPlaying) { switch (lightmapUnwrapping) { case LightmapUnwrapping.UseFirstUvSet: GetComponent <MeshFilter>().mesh = _maker.GetMesh(); break; case LightmapUnwrapping.DefaultUnwrapParam: GetComponent <MeshFilter>().mesh = _maker.GetMesh_GenerateSecondaryUVSet(); break; default: GetComponent <MeshFilter>().mesh = _maker.GetMesh(); break; } } else { GetComponent <MeshFilter>().mesh = _maker.GetMesh(); } #else GetComponent <MeshFilter>().mesh = _maker.GetMesh(); #endif }
public void Apply() { if (removeDoubles) { _maker.RemoveDoubles(); } GetComponent <MeshFilter>().mesh = _maker.GetMesh(); }
public void Button_MakeIt() { Mesh _mesh = GetComponent <MeshFilter>().sharedMesh; MeshRenderer _renderer = GetComponent <MeshRenderer>(); Mesh[] _made_meshes = new Mesh[_mesh.subMeshCount]; // go through the sub indices for (int sub = 0; sub < _mesh.subMeshCount; sub++) { Mesh_Maker maker = new Mesh_Maker(); int[] trinagles = _mesh.GetTriangles(sub); // go through the triangles for (int i = 0; i < trinagles.Length; i += 3) { maker.AddTriangle(new Vector3[] { _mesh.vertices[trinagles[i]], _mesh.vertices[trinagles[i + 1]], _mesh.vertices[trinagles[i + 2]] }, new Vector2[] { _mesh.uv[trinagles[i]], _mesh.uv[trinagles[i + 1]], _mesh.uv[trinagles[i + 2]] }, new Vector3[] { _mesh.normals[trinagles[i]], _mesh.normals[trinagles[i + 1]], _mesh.normals[trinagles[i + 2]] }, 0); } maker.RemoveDoubles(); _made_meshes[sub] = maker.GetMesh(); } // too many while (transform.childCount > _mesh.subMeshCount) { Transform obj = transform.GetChild(transform.childCount - 1); obj.parent = null; DestroyImmediate(obj.gameObject); } // too little while (transform.childCount < _mesh.subMeshCount) { Transform obj = new GameObject("child").transform; obj.SetParent(transform); obj.localPosition = Vector3.zero; obj.localRotation = Quaternion.identity; obj.gameObject.AddComponent <MeshCollider>(); } for (int i = 0; i < transform.childCount; i++) { Transform obj = transform.GetChild(i); obj.gameObject.name = _renderer.sharedMaterials[i].name; _made_meshes[i].name = obj.gameObject.name; obj.GetComponent <MeshCollider>().sharedMesh = _made_meshes[i]; } }