Пример #1
0
        private void CombineMeshes()
        {
            List <Renderer> list = null;
            Dictionary <Material, List <Renderer> > dictionary = new Dictionary <Material, List <Renderer> >();

            foreach (Renderer current in this.renderers)
            {
                if (current.enabled)
                {
                    Material[] sharedMaterials = current.sharedMaterials;
                    for (int i = 0; i < sharedMaterials.Length; i++)
                    {
                        Material material = sharedMaterials[i];
                        if (material != null)
                        {
                            List <Renderer> list2;
                            if (!dictionary.TryGetValue(material, out list2))
                            {
                                list2 = new List <Renderer>();
                                dictionary[material] = list2;
                            }
                            list2.Add(current);
                        }
                    }
                    current.enabled = false;
                }
                else
                {
                    if (list == null)
                    {
                        list = new List <Renderer>();
                    }
                    list.Add(current);
                }
            }
            if (list != null)
            {
                int count = list.Count;
                for (int j = 0; j < count; j++)
                {
                    this.renderers.Remove(list[j]);
                }
                list.Clear();
                list = null;
            }
            foreach (KeyValuePair <Material, List <Renderer> > current2 in dictionary)
            {
                GameObject fromPool = this.meshCombinerGameObjectPool.GetFromPool();
                UnityUtils.ChangeGameObjectParent(fromPool, this.containerObject);
                fromPool.name = current2.get_Key().name;
                MeshFilter component = fromPool.GetComponent <MeshFilter>();
                fromPool.GetComponent <Renderer>().sharedMaterial = current2.get_Key();
                List <Renderer>   value  = current2.get_Value();
                int               count2 = value.Count;
                CombineInstance[] array  = new CombineInstance[count2];
                for (int k = 0; k < count2; k++)
                {
                    MeshFilter component2 = value[k].GetComponent <MeshFilter>();
                    UnityUtils.SetCombineInstance(ref array[k], component2.sharedMesh, component2.transform.localToWorldMatrix);
                }
                component.sharedMesh.CombineMeshes(array, true, true);
            }
        }