Example #1
0
    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;
        }