95 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using UnityEditor.Rendering;
 | |
| using UnityEditor.UIElements;
 | |
| using UnityEditor.VersionControl;
 | |
| using UnityEngine;
 | |
| using UnityEngine.Rendering;
 | |
| using UnityEngine.Rendering.Universal;
 | |
| using UnityEngine.UIElements;
 | |
| 
 | |
| namespace UnityEditor.Rendering.Universal
 | |
| {
 | |
|     [CustomPropertyDrawer(typeof(URPDefaultVolumeProfileSettings))]
 | |
|     [SupportedOnRenderPipeline(typeof(UniversalRenderPipelineAsset))]
 | |
|     class URPDefaultVolumeProfileSettingsPropertyDrawer : DefaultVolumeProfileSettingsPropertyDrawer
 | |
|     {
 | |
|         GUIContent defaultVolumeProfileAssetLabel => EditorGUIUtility.TrTextContent("Default Profile",
 | |
|             "Settings that will be applied project-wide to all Volumes by default when URP is active.");
 | |
| 
 | |
|         protected override GUIContent volumeInfoBoxLabel => EditorGUIUtility.TrTextContent(
 | |
|             "The values in the Default Volume can be overridden by a Volume Profile assigned to URP asset and Volumes inside scenes.");
 | |
| 
 | |
|         protected override VisualElement CreateAssetFieldUI()
 | |
|         {
 | |
|             VisualElement profileLine = new();
 | |
|             var toggle = new Toggle();
 | |
|             toggle.AddToClassList(Foldout.toggleUssClassName);
 | |
|             var checkmark = toggle.Q(className: Toggle.checkmarkUssClassName);
 | |
|             checkmark.AddToClassList(Foldout.checkmarkUssClassName);
 | |
|             var field = new ObjectField(defaultVolumeProfileAssetLabel.text)
 | |
|             {
 | |
|                 tooltip = defaultVolumeProfileAssetLabel.tooltip,
 | |
|                 objectType = typeof(VolumeProfile),
 | |
|                 value = m_VolumeProfileSerializedProperty.objectReferenceValue as VolumeProfile,
 | |
|             };
 | |
|             field.AddToClassList("unity-base-field__aligned"); //Align with other BaseField<T>
 | |
|             field.Q<Label>().RegisterCallback<ClickEvent>(evt => toggle.value ^= true);
 | |
| 
 | |
|             toggle.RegisterValueChangedCallback(evt =>
 | |
|             {
 | |
|                 m_EditorContainer.style.display = evt.newValue ? DisplayStyle.Flex : DisplayStyle.None;
 | |
|                 m_DefaultVolumeProfileFoldoutExpanded.value = evt.newValue;
 | |
|             });
 | |
|             toggle.SetValueWithoutNotify(m_DefaultVolumeProfileFoldoutExpanded.value);
 | |
|             m_EditorContainer.style.display = m_DefaultVolumeProfileFoldoutExpanded.value ? DisplayStyle.Flex : DisplayStyle.None;
 | |
| 
 | |
|             profileLine.Add(toggle);
 | |
|             profileLine.Add(field);
 | |
|             profileLine.style.flexDirection = FlexDirection.Row;
 | |
|             field.style.flexGrow = 1;
 | |
| 
 | |
|             field.RegisterValueChangedCallback(evt =>
 | |
|             {
 | |
|                 if (evt.newValue == evt.previousValue)
 | |
|                     return;
 | |
|                 
 | |
|                 if (RenderPipelineManager.currentPipeline is not UniversalRenderPipeline)
 | |
|                 {
 | |
|                     field.SetValueWithoutNotify(evt.previousValue);
 | |
|                     Debug.Log("Cannot change Default Volume Profile when URP is not active. Rolling back to previous value.");
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 if (evt.newValue == null)
 | |
|                 {
 | |
|                     field.SetValueWithoutNotify(evt.previousValue);
 | |
|                     Debug.Log("This Volume Profile Asset cannot be null. Rolling back to previous value.");
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 if (evt.previousValue == null)
 | |
|                 {
 | |
|                     VolumeProfileUtils.UpdateGlobalDefaultVolumeProfile<UniversalRenderPipeline>(evt.newValue as VolumeProfile);
 | |
|                     m_VolumeProfileSerializedProperty.objectReferenceValue = evt.newValue;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     bool confirmed = VolumeProfileUtils.UpdateGlobalDefaultVolumeProfileWithConfirmation<UniversalRenderPipeline>(evt.newValue as VolumeProfile);
 | |
|                     m_VolumeProfileSerializedProperty.objectReferenceValue = confirmed ? evt.newValue : evt.previousValue;
 | |
|                 }
 | |
| 
 | |
|                 m_VolumeProfileSerializedProperty.serializedObject.ApplyModifiedProperties();
 | |
|                 DestroyDefaultVolumeProfileEditor();
 | |
|                 CreateDefaultVolumeProfileEditor();
 | |
|             });
 | |
| 
 | |
|             return profileLine;
 | |
|         }
 | |
| 
 | |
|         public class URPDefaultVolumeProfileSettingsContextMenu : DefaultVolumeProfileSettingsContextMenu2<URPDefaultVolumeProfileSettings, UniversalRenderPipeline>
 | |
|         {
 | |
|             protected override string defaultVolumeProfilePath => "Assets/VolumeProfile_Default.asset";
 | |
|         }
 | |
|     }
 | |
| }
 |