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); }
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; }
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); } }