private void ShowGroup(ref bool isExpanded, string label, MaterialEditorDescriptor[] descriptors, Func <MaterialEditorDescriptor, string> getName)
        {
            EditorGUIUtility.labelWidth = 350;
            isExpanded = EditorGUILayout.Foldout(isExpanded, label);
            if (isExpanded)
            {
                EditorGUI.indentLevel++;
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.BeginVertical();
                for (int i = 0; i < descriptors.Length; ++i)
                {
                    MaterialEditorDescriptor descriptor = descriptors[i];
                    descriptor.Enabled = EditorGUILayout.Toggle(getName(descriptor), descriptor.Enabled);
                }
                EditorGUILayout.EndVertical();

                EditorGUILayout.BeginVertical();
                for (int i = 0; i < descriptors.Length; ++i)
                {
                    MaterialEditorDescriptor descriptor = descriptors[i];
                    descriptor.Editor = (GameObject)EditorGUILayout.ObjectField(descriptor.Editor, typeof(GameObject), false);
                }
                EditorGUILayout.EndVertical();
                EditorGUILayout.EndHorizontal();
                EditorGUI.indentLevel--;
            }


            EditorGUIUtility.labelWidth = 0;
        }
        public bool IsMaterialEditorEnabled(Shader shader)
        {
            MaterialEditorDescriptor descriptor = GetEditorDescriptor(shader);
            if (descriptor != null)
            {
                return descriptor.Enabled;
            }

            return false;
        }
Пример #3
0
        public static void Generate(EditorDescriptor[] descriptors, MaterialEditorDescriptor[] materialDescriptors)
        {
            Dictionary <GameObject, int> editors = CreateComponentEditorMap(descriptors);

            if (!Directory.Exists(Path.GetFullPath(PrefabsPath + "/Resources")))
            {
                Directory.CreateDirectory(Path.GetFullPath(PrefabsPath + "/Resources"));
            }

            GameObject        go         = new GameObject();
            EditorsMapStorage editorsMap = go.AddComponent <EditorsMapStorage>();

            editorsMap.Editors = editors.OrderBy(k => k.Value).Select(k => k.Key).ToArray();

            MaterialEditorDescriptor defaultDescriptor = materialDescriptors.Where(d => d.Shader == null).FirstOrDefault();

            if (defaultDescriptor != null)
            {
                editorsMap.DefaultMaterialEditor          = defaultDescriptor.Editor;
                editorsMap.IsDefaultMaterialEditorEnabled = defaultDescriptor.Enabled;
            }
            else
            {
                editorsMap.DefaultMaterialEditor          = null;
                editorsMap.IsDefaultMaterialEditorEnabled = false;
            }

            materialDescriptors = materialDescriptors.Where(d => d != defaultDescriptor).ToArray();
            List <Shader>     shaders                = new List <Shader>();
            List <GameObject> materialEditors        = new List <GameObject>();
            List <bool>       materialEditorsEnabled = new List <bool>();

            for (int i = 0; i < materialDescriptors.Length; ++i)
            {
                MaterialEditorDescriptor descriptor = materialDescriptors[i];
                if (descriptor.Editor != null)
                {
                    shaders.Add(descriptor.Shader);
                    materialEditors.Add(descriptor.Editor);
                    materialEditorsEnabled.Add(descriptor.Enabled);
                }
            }

            editorsMap.Shaders                 = shaders.ToArray();
            editorsMap.MaterialEditors         = materialEditors.ToArray();
            editorsMap.IsMaterialEditorEnabled = materialEditorsEnabled.ToArray();

            string path = PrefabsPath + "/Resources/" + EditorsMapStorage.EditorsMapPrefabName + ".prefab";

            PrefabUtility.SaveAsPrefabAsset(go, path);
            UnityEngine.Object.DestroyImmediate(go);

            AssetDatabase.ImportAsset(ScriptsPath, ImportAssetOptions.ImportRecursive);
        }
        public GameObject GetMaterialEditor(Shader shader, bool strict = false)
        {
            MaterialEditorDescriptor descriptor = GetEditorDescriptor(shader);
            if(descriptor != null)
            {
                return descriptor.Editor;
            }

            if(strict)
            {
                return null;
            }

            return m_defaultMaterialEditor;
        }