Material GetRawImageMaterial() { var ri = RootMaterialOwner.GetComponent<UnityEngine.UI.RawImage> (); if (ri == null) return null; ri.material = GetInstancedMaterial (ri.material); return ri.material; }
Material GetSpriteRendererMaterial() { var t = RootMaterialOwner.GetComponent<SpriteRenderer> (); if (t == null) return null; t.material = GetInstancedMaterial (t.material); return t.material; }
Material GetTextMaterial() { var t = RootMaterialOwner.GetComponent<UnityEngine.UI.Text> (); if (t == null) return null; t.material = GetInstancedMaterial (t.material); return t.material; }
Material GetMeshRendererMaterial() { MeshRenderer mr = materialOwner; if (mr == null) { mr = RootMaterialOwner.GetComponent<MeshRenderer> (); } if (mr == null) return null; return UseSharedMaterial ? mr.sharedMaterial : mr.material; }
void ForEachMaterial(System.Action<Material> Lambda) { // todo; merge all this. Cache an array of materials, and set all children to the same material (option!) // todo: make this an option, and cache a list of materials if (MaterialOwnerInChildren && !HasSetAllChildrensMaterial) { var mrs = RootMaterialOwner.GetComponentsInChildren<MeshRenderer> (); var ris = RootMaterialOwner.GetComponentsInChildren<UnityEngine.UI.RawImage> (); var ts = RootMaterialOwner.GetComponentsInChildren<UnityEngine.UI.Text> (); var cm = CachedMaterial; foreach (var mr in mrs) { if (mr.sharedMaterial == null) continue; if (cm == null) cm = UseSharedMaterial ? mr.sharedMaterial : mr.material; mr.sharedMaterial = cm; } foreach (var ri in ris) { if (ri.material == null) continue; if (cm == null) cm = ri.material; ri.material = cm; } foreach (var t in ts) { if (t.material == null) continue; if (cm == null) cm = t.material; t.material = cm; } HasSetAllChildrensMaterial = true; // don't cache in editor if (!Application.isPlaying) { if (cm != null) Lambda.Invoke (cm); return; } _material = cm; } var mat = CachedMaterial; if (mat != null) Lambda.Invoke (mat); }