internal static void ClearPropertyBlock(SelectionGroup group) { foreach (var r in SelectionGroupUtility.GetComponents <Renderer>(group.name)) { r.SetPropertyBlock(null); } }
public static void SetPropertyBlock(SelectionGroup group, IEnumerable <PropertyChange> changes) { var renderers = SelectionGroupUtility.GetComponents <Renderer>(group.name).ToArray(); foreach (var r in renderers) { var mpb = new MaterialPropertyBlock(); foreach (var p in changes) { if (Match(p.memberNameQuery, r.name)) { switch (p.propertyType) { case PropertyChange.VECTOR: mpb.SetVector(p.propertyName, p.vectorValue); break; case PropertyChange.COLOR: mpb.SetColor(p.propertyName, p.colorValue); break; case PropertyChange.FLOAT: mpb.SetFloat(p.propertyName, p.floatValue); break; } } } r.SetPropertyBlock(mpb); } }
void InitChangeList(object menuData) { var groupName = menuData as string; itemsProperty.ClearArray(); foreach (var i in SelectionGroupUtility.GetComponents <Renderer>(groupName)) { for (var index = 0; index < i.sharedMaterials.Length; index++) { //required to work around bug in GetMaterialProperties var singleMaterial = new[] { i.sharedMaterials[index] }; foreach (var p in MaterialEditor.GetMaterialProperties(singleMaterial)) { if (p.type == MaterialProperty.PropType.Color || p.type == MaterialProperty.PropType.Float || p.type == MaterialProperty.PropType.Range || p.type == MaterialProperty.PropType.Vector) { itemsProperty.InsertArrayElementAtIndex(0); var change = itemsProperty.GetArrayElementAtIndex(0); change.FindPropertyRelative("memberNameQuery").stringValue = i.name; change.FindPropertyRelative("materialIndex").intValue = index; change.FindPropertyRelative("propertyDisplayName").stringValue = p.displayName; change.FindPropertyRelative("propertyName").stringValue = p.name; var typeProperty = change.FindPropertyRelative("propertyType"); switch (p.type) { case MaterialProperty.PropType.Color: change.FindPropertyRelative("colorValue").colorValue = UnityEngine.Random.ColorHSV(0, 1, 0.7f, 1, 0.5f, 1f); typeProperty.intValue = PropertyChange.COLOR; break; case MaterialProperty.PropType.Float: case MaterialProperty.PropType.Range: change.FindPropertyRelative("floatValue").floatValue = 0; typeProperty.intValue = PropertyChange.FLOAT; break; case MaterialProperty.PropType.Vector: typeProperty.intValue = PropertyChange.VECTOR; change.FindPropertyRelative("vectorValue").vector4Value = Vector4.zero; break; } } } } } itemsProperty.serializedObject.ApplyModifiedProperties(); }
public static bool GetDefaultVector(SelectionGroup group, PropertyChange p, out Vector4 vector) { var renderers = SelectionGroupUtility.GetComponents <Renderer>(group.name); foreach (var r in renderers) { if (Match(p.memberNameQuery, r.name)) { vector = r.sharedMaterials[p.materialIndex].GetVector(p.propertyName); return(true); } } vector = Vector4.zero; return(false); }
public static bool GetDefaultFloat(SelectionGroup group, PropertyChange p, out float value) { var renderers = SelectionGroupUtility.GetComponents <Renderer>(group.name); foreach (var r in renderers) { if (Match(p.memberNameQuery, r.name)) { value = r.sharedMaterials[p.materialIndex].GetFloat(p.propertyName); return(true); } } value = 0; return(false); }