Example #1
0
        void ApplyMeshRenderer()
        {
            if (meshFilter == null)
            {
                meshFilter = GetComponent <MeshFilter>();
            }
            if (meshFilter != null)
            {
                var mesh = meshFilter.mesh;
                if (mesh == null)
                {
                    mesh            = new Mesh();
                    meshFilter.mesh = mesh;
                }
                mesh.Clear();
                if (vertex != null)
                {
                    mesh.SetVertices(vertex);
                    mesh.SetUVs(0, uv);
                    mesh.SetUVs(1, uv1);
                    mesh.SetUVs(2, uv2);
                    mesh.SetUVs(3, uv3);
                    mesh.SetUVs(4, uv4);
                    mesh.SetColors(colors);

                    var submesh = MatCollector.submesh;
                    if (submesh != null)
                    {
                        mesh.subMeshCount = submesh.Count;
                        for (int i = 0; i < submesh.Count; i++)
                        {
                            mesh.SetTriangles(submesh[i], i);
                        }
                    }
                }
            }
            if (renderer == null)
            {
                renderer = GetComponent <MeshRenderer>();
            }
            if (renderer != null)
            {
                renderer.materials = MatCollector.GenerateMaterial();
            }
        }
Example #2
0
        public void ApplyMeshRenderer(MeshFilter meshFilter, MeshRenderer renderer)
        {
            if (meshFilter == null)
            {
                return;
            }
            if (meshFilter != null)
            {
                Mesh mesh;
#if UNITY_EDITOR
                if (Application.isPlaying)
                {
                    mesh = meshFilter.mesh;
                }
                else
                {
                    mesh = meshFilter.sharedMesh;
                }
#else
                mesh = meshFilter.mesh;
#endif
                if (mesh == null)
                {
                    mesh            = new Mesh();
                    meshFilter.mesh = mesh;
                }
                mesh.Clear();
                if (vertex != null)
                {
                    mesh.SetVertices(vertex);
                    mesh.SetUVs(0, uv);
                    mesh.SetUVs(1, uv1);
                    mesh.SetUVs(2, uv2);
                    mesh.SetUVs(3, uv3);
                    mesh.SetUVs(4, uv4);
                    mesh.SetColors(colors);

                    var submesh = MatCollector.submesh;
                    if (submesh != null)
                    {
                        mesh.subMeshCount = submesh.Count;
                        for (int i = 0; i < submesh.Count; i++)
                        {
                            var tri = submesh[i];
                            //for (int k = 0; k < tri.Length; k++)
                            //    if (tri[k] > vertex.Count)
                            //    {
                            //        Debug.LogError(k + ":" + tri[k]);
                            //        tri[k] = 0;
                            //    }
                            mesh.SetTriangles(tri, i);
                        }
                    }
                }
            }
            if (renderer != null)
            {
#if UNITY_EDITOR
                if (Application.isPlaying)
                {
                    renderer.materials = MatCollector.GenerateMaterial();   //这里会产生一次GC
                }
                else
                {
                    renderer.sharedMaterials = MatCollector.GenerateMaterial();    //这里会产生一次GC
                }
#else
                renderer.materials = MatCollector.GenerateMaterial();   //这里会产生一次GC
#endif
            }
        }