int buildChildrenMeshes(SimpleMeshCreator creator, Transform tf, ref Matrix4x4 mtInvRoot) { var destroyCount = 0; for (var i = 0; i < tf.childCount; i++) { var tfChild = tf.GetChild(i); if (tfChild.GetComponent <_StructurePart3>() == null) { var subChildrenLength = tfChild.childCount; if (subChildrenLength > 0) { var subChildrenDestroyedCount = buildChildrenMeshes(creator, tfChild, ref mtInvRoot); subChildrenLength -= subChildrenDestroyedCount; } var mf = tfChild.GetComponent <MeshFilter>(); if (mf != null) { var mt = mtInvRoot * tfChild.localToWorldMatrix; creator.addGeometory(mf.sharedMesh, ref mt); } if (subChildrenLength == 0) { Destroy(tfChild.gameObject); destroyCount++; } } } return(destroyCount); }
/// <summary> /// 开始根据参数修改模型 只修改内部网格 不会删除原先gameobject /// </summary> /// <param name="pos">平面坐标</param> /// <param name="worldDic">法线方向</param> /// <param name="scale">高度</param> public void Building() { MeshData meshData = SimpleMeshCreator.DrawNPrism(Pos, WorldDir, Height, Center, false, out section); body.transform.position = meshData.center; body.transform.rotation = meshData.quaternion; Mesh mesh = new Mesh(); mesh.vertices = meshData.vertices; mesh.triangles = meshData.triangles; mesh.uv = meshData.uv; mesh.RecalculateTangents(); mesh.RecalculateNormals(); mesh.RecalculateBounds(); MeshFilter mf; MeshRenderer mr; if (body.GetComponent <MeshFilter>() == null) { mf = body.AddComponent <MeshFilter>(); } else { mf = body.GetComponent <MeshFilter>(); } if (body.GetComponent <MeshRenderer>() == null) { mr = body.AddComponent <MeshRenderer>(); } else { mr = body.GetComponent <MeshRenderer>(); } mr.material = Mat; mf.mesh = mesh; }