void DoCustomEffectSorter() { EditorUtilities.DrawSplitter(); m_ShowCustomSorter.boolValue = EditorUtilities.DrawHeader("Custom Effect Sorting", m_ShowCustomSorter.boolValue); if (m_ShowCustomSorter.boolValue) { GUILayout.Space(5); bool anyList = false; if (m_CustomLists != null) { foreach (var kvp in m_CustomLists) { var list = kvp.Value; // Skip empty lists to avoid polluting the inspector if (list.count == 0) continue; list.DoLayoutList(); anyList = true; } } if (!anyList) { EditorGUILayout.HelpBox("No custom effect loaded.", MessageType.Info); GUILayout.Space(3); } } }
private void DoToolkit() { EditorUtilities.DrawSplitter(); m_ShowToolkit.boolValue = EditorUtilities.DrawHeader("Toolkit", m_ShowToolkit.boolValue); if (m_ShowToolkit.boolValue) { GUILayout.Space(2); if (GUILayout.Button(EditorUtilities.GetContent("Export frame to EXR..."), EditorStyles.miniButton)) { var menu = new GenericMenu(); menu.AddItem(EditorUtilities.GetContent("Full Frame (as displayed)"), false, () => ExportFrameToExr(ExportMode.FullFrame)); menu.AddItem(EditorUtilities.GetContent("Disable post-processing"), false, () => ExportFrameToExr(ExportMode.DisablePost)); menu.AddItem(EditorUtilities.GetContent("Break before Color Grading (Linear)"), false, () => ExportFrameToExr(ExportMode.BreakBeforeColorGradingLinear)); menu.AddItem(EditorUtilities.GetContent("Break before Color Grading (Log)"), false, () => ExportFrameToExr(ExportMode.BreakBeforeColorGradingLog)); menu.ShowAsContext(); } if (GUILayout.Button( EditorUtilities.GetContent( "Select all layer volumes|Selects all the volumes that will influence this layer."), EditorStyles.miniButton)) { var volumes = RuntimeUtilities.GetAllSceneObjects <PostProcessVolume>() .Where(x => (m_VolumeLayer.intValue & (1 << x.gameObject.layer)) != 0) .Select(x => x.gameObject) .Cast <Object>() .ToArray(); if (volumes.Length > 0) { Selection.objects = volumes; } } if (GUILayout.Button( EditorUtilities.GetContent( "Select all active volumes|Selects all volumes currently affecting the layer."), EditorStyles.miniButton)) { var volumes = new List <PostProcessVolume>(); PostProcessManager.instance.GetActiveVolumes(m_Target, volumes); if (volumes.Count > 0) { Selection.objects = volumes .Select(x => x.gameObject) .Cast <Object>() .ToArray(); } } GUILayout.Space(3); } }
void DoRenderingFeatures(Camera camera) { if (RuntimeUtilities.scriptableRenderPipelineActive) return; EditorUtilities.DrawSplitter(); m_ShowRenderingFeatures.boolValue = EditorUtilities.DrawHeader("Rendering Features", m_ShowRenderingFeatures.boolValue); if (m_ShowRenderingFeatures.boolValue) { GUILayout.Space(2); DoAmbientOcclusion(camera); DoFog(camera); } }
public void OnGUI() { if (asset == null) { return; } if (asset.isDirty) { RefreshEditors(); asset.isDirty = false; } bool isEditable = !VersionControl.Provider.isActive || AssetDatabase.IsOpenForEdit(asset, StatusQueryOptions.UseCachedIfPossible); using (new EditorGUI.DisabledScope(!isEditable)) { EditorGUILayout.LabelField(EditorUtilities.GetContent("Overrides"), EditorStyles.boldLabel); // Override list for (int i = 0; i < m_Editors.Count; i++) { var editor = m_Editors[i]; string title = editor.GetDisplayTitle(); int id = i; // Needed for closure capture below EditorUtilities.DrawSplitter(); bool displayContent = EditorUtilities.DrawHeader( title, editor.baseProperty, editor.activeProperty, editor.target, () => ResetEffectOverride(editor.target.GetType(), id), () => RemoveEffectOverride(id) ); if (displayContent) { using (new EditorGUI.DisabledScope(!editor.activeProperty.boolValue)) editor.OnInternalInspectorGUI(); } } if (m_Editors.Count > 0) { EditorUtilities.DrawSplitter(); EditorGUILayout.Space(); } else { EditorGUILayout.HelpBox("No override set on this volume.", MessageType.Info); } if (GUILayout.Button("Add effect...", EditorStyles.miniButton)) { var menu = new GenericMenu(); var typeMap = PostProcessManager.instance.settingsTypes; foreach (var kvp in typeMap) { var type = kvp.Key; var title = EditorUtilities.GetContent(kvp.Value.menuItem); bool exists = asset.HasSettings(type); if (!exists) { menu.AddItem(title, false, () => AddEffectOverride(type)); } else { menu.AddDisabledItem(title); } } menu.ShowAsContext(); } EditorGUILayout.Space(); } }
private void DoCustomEffectSorter() { EditorUtilities.DrawSplitter(); m_ShowCustomSorter.boolValue = EditorUtilities.DrawHeader("Custom Effect Sorting", m_ShowCustomSorter.boolValue); if (m_ShowCustomSorter.boolValue) { var isInPrefab = false; // Init lists if needed if (m_CustomLists == null) { // In some cases the editor will refresh before components which means // components might not have been fully initialized yet. In this case we also // need to make sure that we're not in a prefab as sorteBundles isn't a // serializable object and won't exist until put on a scene. if (m_Target.sortedBundles == null) { isInPrefab = string.IsNullOrEmpty(m_Target.gameObject.scene.name); if (!isInPrefab) { Repaint(); } } else { // Create a reorderable list for each injection event m_CustomLists = new Dictionary <PostProcessEvent, ReorderableList>(); foreach (var evt in Enum.GetValues(typeof(PostProcessEvent)).Cast <PostProcessEvent>()) { var bundles = m_Target.sortedBundles[evt]; var listName = ObjectNames.NicifyVariableName(evt.ToString()); var list = new ReorderableList(bundles, typeof(PostProcessLayer.SerializedBundleRef), true, true, false, false); list.drawHeaderCallback = rect => { EditorGUI.LabelField(rect, listName); }; list.drawElementCallback = (rect, index, isActive, isFocused) => { var sbr = (PostProcessLayer.SerializedBundleRef)list.list[index]; EditorGUI.LabelField(rect, sbr.bundle.attribute.menuItem); }; list.onReorderCallback = l => { EditorUtility.SetDirty(m_Target); }; m_CustomLists.Add(evt, list); } } } GUILayout.Space(5); if (isInPrefab) { EditorGUILayout.HelpBox("Not supported in prefabs.", MessageType.Info); GUILayout.Space(3); return; } var anyList = false; if (m_CustomLists != null) { foreach (var kvp in m_CustomLists) { var list = kvp.Value; // Skip empty lists to avoid polluting the inspector if (list.count == 0) { continue; } list.DoLayoutList(); anyList = true; } } if (!anyList) { EditorGUILayout.HelpBox("No custom effect loaded.", MessageType.Info); GUILayout.Space(3); } } }