Esempio n. 1
0
 public MaterialGroup GetInstancedMaterialGroup()
 {
     if (this._instancedGroup == null)
     {
         this._instancedGroup         = new MaterialGroup(string.Format("{0} (Instanced)", this.groupName));
         this._instancedGroup.entries = new RendererMaterials[this.entries.Length];
         int num = 0;
         for (int i = 0; i < this.entries.Length; i++)
         {
             RendererMaterials       materials     = this.entries[i];
             Material[]              materialArray = new Material[materials.materials.Length];
             MaterialColorModifier[] modifierArray = new MaterialColorModifier[materials.materials.Length];
             for (int j = 0; j < materialArray.Length; j++)
             {
                 materialArray[j]      = new Material(materials.materials[j]);
                 materialArray[j].name = string.Format("{0} #{1}", materials.materials[j].name, num++);
                 modifierArray[j]      = new MaterialColorModifier(materialArray[j]);
             }
             this._instancedGroup.entries[i]                = new RendererMaterials();
             this._instancedGroup.entries[i].materials      = materialArray;
             this._instancedGroup.entries[i].colorModifiers = modifierArray;
             this._instancedGroup.entries[i].skipped        = materials.skipped;
         }
     }
     return(this._instancedGroup);
 }
Esempio n. 2
0
        public MaterialGroup(string groupName, Renderer[] renderers)
        {
            this.groupName = groupName;
            this.entries   = new RendererMaterials[renderers.Length];
            for (int i = 0; i < this.entries.Length; i++)
            {
                Renderer renderer = renderers[i];
                this.entries[i] = new RendererMaterials();
                if ((renderer is MeshRenderer) || (renderer is SkinnedMeshRenderer))
                {
                    this.entries[i].materials = renderers[i].materials;
                }
                else
                {
                    this.entries[i].skipped = true;
                }
            }
            List <Material> list = new List <Material>();

            for (int j = 0; j < this.entries.Length; j++)
            {
                RendererMaterials materials = this.entries[j];
                materials.colorModifiers = new MaterialColorModifier[materials.materials.Length];
                for (int k = 0; k < materials.materials.Length; k++)
                {
                    Material material = materials.materials[k];
                    bool     flag     = false;
                    for (int m = 0; m < list.Count; m++)
                    {
                        if (list[m].name == material.name)
                        {
                            UnityEngine.Object.Destroy(material);
                            materials.materials[k]      = list[m];
                            materials.colorModifiers[k] = new MaterialColorModifier();
                            flag = true;
                            break;
                        }
                    }
                    if (!flag)
                    {
                        list.Add(material);
                        materials.colorModifiers[k] = new MaterialColorModifier(materials.materials[k]);
                    }
                }
            }
            this._instancedGroup = this;
        }
Esempio n. 3
0
    private void Awake()
    {
        renderers = new List <Renderer>();
        renderers.AddRange(GetComponentsInChildren <Renderer>());

        rendererMaterials = new List <RendererMaterials>();
        foreach (var r in renderers)
        {
            RendererMaterials rm = new RendererMaterials();
            rm.renderer  = r;
            rm.materials = new Material[r.materials.Length];
            for (int i = 0; i < r.materials.Length; i++)
            {
                rm.materials[i] = new Material(r.materials[i]);
            }
            rendererMaterials.Add(rm);
        }
    }