Пример #1
0
        /**
         * 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];
            }
        }