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