Ejemplo n.º 1
0
 internal static void ClearPropertyBlock(SelectionGroup group)
 {
     foreach (var r in SelectionGroupUtility.GetComponents <Renderer>(group.name))
     {
         r.SetPropertyBlock(null);
     }
 }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        void ShowPopupMenu()
        {
            var menu = new GenericMenu();

            foreach (var i in SelectionGroupUtility.GetGroupNames())
            {
                menu.AddItem(new GUIContent($"Initialize from Selection Group/{i}"), false, InitChangeList, i);
            }
            menu.AddItem(new GUIContent("Enable Property Editing"), enableEdit, () => enableEdit = !enableEdit);
            menu.ShowAsContext();
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 void RefreshGroupIndex()
 {
     lights.Clear();
     renderers.Clear();
     lightGroups.Clear();
     rendererGroups.Clear();
     foreach (var n in SelectionGroupUtility.GetGroupNames())
     {
         foreach (var g in SelectionGroupUtility.GetMembers(n))
         {
             if (g.TryGetComponent <Light>(out Light light))
             {
                 AddLight(light);
             }
             if (g.TryGetComponent <Renderer>(out Renderer renderer))
             {
                 AddRenderer(renderer);
             }
         }
     }
     foreach (var kv in lightGroups)
     {
         var cullingMask = kv.Key;
         foreach (var renderer in renderers)
         {
             if ((1 << renderer.gameObject.layer & cullingMask) != 0)
             {
                 if (rendererGroups.TryGetValue(cullingMask, out HashSet <Renderer> group))
                 {
                     group.Add(renderer);
                 }
                 else
                 {
                     rendererGroups.Add(cullingMask, new HashSet <Renderer>(new[] { renderer }));
                 }
             }
         }
     }
 }