You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
10 KiB
245 lines
10 KiB
using UnityEngine; |
|
using UnityEngine.Rendering.Universal; |
|
using UnityEngine.Rendering; |
|
using UnityEngine.Scripting.APIUpdating; |
|
using UnityEditorInternal; |
|
using System.Collections.Generic; |
|
using UnityEngine.UIElements; |
|
using System.Linq; |
|
|
|
namespace UnityEditor.Rendering.Universal |
|
{ |
|
using CED = CoreEditorDrawer<SerializedUniversalRenderPipelineGlobalSettings>; |
|
|
|
class UniversalGlobalSettingsPanelProvider |
|
{ |
|
static UniversalGlobalSettingsPanelIMGUI s_IMGUIImpl = new UniversalGlobalSettingsPanelIMGUI(); |
|
|
|
[SettingsProvider] |
|
public static SettingsProvider CreateSettingsProvider() |
|
{ |
|
return new SettingsProvider("Project/Graphics/URP Global Settings", SettingsScope.Project) |
|
{ |
|
activateHandler = s_IMGUIImpl.OnActivate, |
|
keywords = SettingsProvider.GetSearchKeywordsFromGUIContentProperties<UniversalGlobalSettingsPanelIMGUI.Styles>().ToArray(), |
|
guiHandler = s_IMGUIImpl.DoGUI, |
|
titleBarGuiHandler = s_IMGUIImpl.OnTitleBarGUI |
|
}; |
|
} |
|
} |
|
|
|
internal partial class UniversalGlobalSettingsPanelIMGUI |
|
{ |
|
public static readonly CED.IDrawer Inspector; |
|
|
|
public class DocumentationUrls |
|
{ |
|
public static readonly string k_LightLayers = "Light-Layers"; |
|
} |
|
|
|
static UniversalGlobalSettingsPanelIMGUI() |
|
{ |
|
Inspector = CED.Group( |
|
LightLayerNamesSection, |
|
MiscSection |
|
); |
|
} |
|
|
|
SerializedUniversalRenderPipelineGlobalSettings serializedSettings; |
|
UniversalRenderPipelineGlobalSettings settingsSerialized; |
|
|
|
public void OnTitleBarGUI() |
|
{ |
|
if (GUILayout.Button(CoreEditorStyles.iconHelp, CoreEditorStyles.iconHelpStyle)) |
|
Help.BrowseURL(Documentation.GetPageLink("URP-Global-Settings")); |
|
} |
|
|
|
public void DoGUI(string searchContext) |
|
{ |
|
// When the asset being serialized has been deleted before its reconstruction |
|
if (serializedSettings != null && serializedSettings.serializedObject.targetObject == null) |
|
{ |
|
serializedSettings = null; |
|
settingsSerialized = null; |
|
} |
|
|
|
if (serializedSettings == null || settingsSerialized != UniversalRenderPipelineGlobalSettings.instance) |
|
{ |
|
if (UniversalRenderPipelineGlobalSettings.instance != null) |
|
{ |
|
settingsSerialized = UniversalRenderPipelineGlobalSettings.Ensure(); |
|
var serializedObject = new SerializedObject(settingsSerialized); |
|
serializedSettings = new SerializedUniversalRenderPipelineGlobalSettings(serializedObject); |
|
} |
|
else |
|
{ |
|
serializedSettings = null; |
|
settingsSerialized = null; |
|
} |
|
} |
|
else if (settingsSerialized != null && serializedSettings != null) |
|
{ |
|
serializedSettings.serializedObject.Update(); |
|
} |
|
|
|
DrawAssetSelection(ref serializedSettings, null); |
|
DrawWarnings(ref serializedSettings, null); |
|
if (settingsSerialized != null && serializedSettings != null) |
|
{ |
|
EditorGUILayout.Space(); |
|
Inspector.Draw(serializedSettings, null); |
|
serializedSettings.serializedObject?.ApplyModifiedProperties(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// Executed when activate is called from the settings provider. |
|
/// </summary> |
|
/// <param name="searchContext"></param> |
|
/// <param name="rootElement"></param> |
|
public void OnActivate(string searchContext, VisualElement rootElement) |
|
{ |
|
} |
|
|
|
void DrawWarnings(ref SerializedUniversalRenderPipelineGlobalSettings serialized, Editor owner) |
|
{ |
|
bool isURPinUse = UniversalRenderPipeline.asset != null; |
|
if (isURPinUse && serialized != null) |
|
return; |
|
|
|
if (isURPinUse) |
|
{ |
|
ShowMessageWithFixButton(Styles.warningGlobalSettingsMissing, MessageType.Warning); |
|
} |
|
else |
|
{ |
|
EditorGUILayout.HelpBox(Styles.warningUrpNotActive, MessageType.Warning); |
|
if (serialized == null) |
|
ShowMessageWithFixButton(Styles.infoGlobalSettingsMissing, MessageType.Info); |
|
} |
|
} |
|
|
|
void ShowMessageWithFixButton(string helpBoxLabel, MessageType type) |
|
{ |
|
using (new EditorGUILayout.HorizontalScope()) |
|
{ |
|
EditorGUILayout.HelpBox(helpBoxLabel, type); |
|
if (GUILayout.Button(Styles.fixAssetButtonLabel, GUILayout.Width(45))) |
|
{ |
|
UniversalRenderPipelineGlobalSettings.Ensure(); |
|
} |
|
} |
|
} |
|
|
|
#region Universal Global Settings asset selection |
|
void DrawAssetSelection(ref SerializedUniversalRenderPipelineGlobalSettings serialized, Editor owner) |
|
{ |
|
var oldWidth = EditorGUIUtility.labelWidth; |
|
EditorGUIUtility.labelWidth = Styles.labelWidth; |
|
using (new EditorGUILayout.HorizontalScope()) |
|
{ |
|
EditorGUI.BeginChangeCheck(); |
|
var newAsset = (UniversalRenderPipelineGlobalSettings)EditorGUILayout.ObjectField(settingsSerialized, typeof(UniversalRenderPipelineGlobalSettings), false); |
|
if (EditorGUI.EndChangeCheck()) |
|
{ |
|
UniversalRenderPipelineGlobalSettings.UpdateGraphicsSettings(newAsset); |
|
Debug.Assert(newAsset == UniversalRenderPipelineGlobalSettings.instance); |
|
if (settingsSerialized != null && !settingsSerialized.Equals(null)) |
|
EditorUtility.SetDirty(settingsSerialized); |
|
} |
|
|
|
if (GUILayout.Button(Styles.newAssetButtonLabel, GUILayout.Width(45), GUILayout.Height(18))) |
|
{ |
|
UniversalGlobalSettingsCreator.Create(useProjectSettingsFolder: true, activateAsset: true); |
|
} |
|
|
|
bool guiEnabled = GUI.enabled; |
|
GUI.enabled = guiEnabled && (settingsSerialized != null); |
|
if (GUILayout.Button(Styles.cloneAssetButtonLabel, GUILayout.Width(45), GUILayout.Height(18))) |
|
{ |
|
UniversalGlobalSettingsCreator.Clone(settingsSerialized, activateAsset: true); |
|
} |
|
GUI.enabled = guiEnabled; |
|
} |
|
EditorGUIUtility.labelWidth = oldWidth; |
|
EditorGUILayout.Space(); |
|
} |
|
|
|
#endregion |
|
#region Rendering Layer Names |
|
|
|
static readonly CED.IDrawer LightLayerNamesSection = CED.Group( |
|
CED.Group((serialized, owner) => CoreEditorUtils.DrawSectionHeader(Styles.lightLayersLabel, contextAction: pos => OnContextClickLightLayerNames(pos, serialized))), |
|
CED.Group((serialized, owner) => EditorGUILayout.Space()), |
|
CED.Group(DrawLightLayerNames), |
|
CED.Group((serialized, owner) => EditorGUILayout.Space()) |
|
); |
|
|
|
static void DrawLightLayerNames(SerializedUniversalRenderPipelineGlobalSettings serialized, Editor owner) |
|
{ |
|
var oldWidth = EditorGUIUtility.labelWidth; |
|
EditorGUIUtility.labelWidth = Styles.labelWidth; |
|
|
|
using (new EditorGUI.IndentLevelScope()) |
|
{ |
|
using (var changed = new EditorGUI.ChangeCheckScope()) |
|
{ |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName0, Styles.lightLayerName0); |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName1, Styles.lightLayerName1); |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName2, Styles.lightLayerName2); |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName3, Styles.lightLayerName3); |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName4, Styles.lightLayerName4); |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName5, Styles.lightLayerName5); |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName6, Styles.lightLayerName6); |
|
EditorGUILayout.DelayedTextField(serialized.lightLayerName7, Styles.lightLayerName7); |
|
if (changed.changed) |
|
{ |
|
serialized.serializedObject?.ApplyModifiedProperties(); |
|
(serialized.serializedObject.targetObject as UniversalRenderPipelineGlobalSettings).UpdateRenderingLayerNames(); |
|
} |
|
} |
|
} |
|
|
|
EditorGUIUtility.labelWidth = oldWidth; |
|
} |
|
|
|
static void OnContextClickLightLayerNames(Vector2 position, SerializedUniversalRenderPipelineGlobalSettings serialized) |
|
{ |
|
var menu = new GenericMenu(); |
|
menu.AddItem(CoreEditorStyles.resetButtonLabel, false, () => |
|
{ |
|
var globalSettings = (serialized.serializedObject.targetObject as UniversalRenderPipelineGlobalSettings); |
|
globalSettings.ResetRenderingLayerNames(); |
|
}); |
|
menu.DropDown(new Rect(position, Vector2.zero)); |
|
} |
|
|
|
#endregion |
|
|
|
#region Misc Settings |
|
|
|
static readonly CED.IDrawer MiscSection = CED.Group( |
|
CED.Group((serialized, owner) => CoreEditorUtils.DrawSectionHeader(Styles.miscSettingsLabel)), |
|
CED.Group((serialized, owner) => EditorGUILayout.Space()), |
|
CED.Group(DrawMiscSettings), |
|
CED.Group((serialized, owner) => EditorGUILayout.Space()) |
|
); |
|
|
|
static void DrawMiscSettings(SerializedUniversalRenderPipelineGlobalSettings serialized, Editor owner) |
|
{ |
|
var oldWidth = EditorGUIUtility.labelWidth; |
|
EditorGUIUtility.labelWidth = Styles.labelWidth; |
|
|
|
using (new EditorGUI.IndentLevelScope()) |
|
{ |
|
EditorGUILayout.PropertyField(serialized.stripDebugVariants, Styles.stripDebugVariantsLabel); |
|
EditorGUILayout.PropertyField(serialized.stripUnusedPostProcessingVariants, Styles.stripUnusedPostProcessingVariantsLabel); |
|
EditorGUILayout.PropertyField(serialized.stripUnusedVariants, Styles.stripUnusedVariantsLabel); |
|
} |
|
|
|
EditorGUIUtility.labelWidth = oldWidth; |
|
} |
|
|
|
#endregion |
|
} |
|
}
|
|
|