123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- namespace UnityEditor.Rendering.Universal
- {
- using UnityEngine;
- using UnityEngine.Rendering.Universal;
- using CED = CoreEditorDrawer<UniversalRenderPipelineSerializedCamera>;
-
- static partial class UniversalRenderPipelineCameraUI
- {
- public partial class Environment
- {
-
- internal enum BackgroundType
- {
- Skybox = 0,
- SolidColor,
- [InspectorName("Uninitialized")]
- DontCare,
- }
-
- public static readonly CED.IDrawer Drawer;
-
- static Environment()
- {
- Drawer = CED.FoldoutGroup(
- CameraUI.Environment.Styles.header,
- Expandable.Environment,
- k_ExpandedState,
- FoldoutOption.Indent,
- CED.Conditional(
- (serialized, owner) => (CameraRenderType)serialized.cameraType.intValue == CameraRenderType.Base,
- CED.Group(
- Drawer_Environment_ClearFlags
- )
- ),
- CED.Group(
- Styles.volumesSettingsText,
- CED.Group(
- GroupOption.Indent,
- Drawer_Environment_VolumeUpdate,
- CameraUI.Environment.Drawer_Environment_VolumeLayerMask,
- Drawer_Environment_VolumeTrigger
- )
- )
- );
- }
-
- static BackgroundType GetBackgroundType(CameraClearFlags clearFlags)
- {
- switch (clearFlags)
- {
- case CameraClearFlags.Skybox:
- return BackgroundType.Skybox;
- case CameraClearFlags.Nothing:
- return BackgroundType.DontCare;
-
- // DepthOnly is not supported by design in UniversalRP. We upgrade it to SolidColor
- default:
- return BackgroundType.SolidColor;
- }
- }
-
- static void Drawer_Environment_ClearFlags(UniversalRenderPipelineSerializedCamera p, Editor owner)
- {
- EditorGUI.showMixedValue = p.baseCameraSettings.clearFlags.hasMultipleDifferentValues;
-
- Rect clearFlagsRect = EditorGUILayout.GetControlRect();
- EditorGUI.BeginProperty(clearFlagsRect, Styles.backgroundType, p.baseCameraSettings.clearFlags);
- {
- EditorGUI.BeginChangeCheck();
- BackgroundType backgroundType = GetBackgroundType((CameraClearFlags)p.baseCameraSettings.clearFlags.intValue);
- var selectedValue = (BackgroundType)EditorGUI.EnumPopup(clearFlagsRect, Styles.backgroundType, backgroundType);
- if (EditorGUI.EndChangeCheck())
- {
- CameraClearFlags selectedClearFlags;
- switch (selectedValue)
- {
- case BackgroundType.Skybox:
- selectedClearFlags = CameraClearFlags.Skybox;
- break;
-
- case BackgroundType.DontCare:
- selectedClearFlags = CameraClearFlags.Nothing;
- break;
-
- default:
- selectedClearFlags = CameraClearFlags.SolidColor;
- break;
- }
-
- p.baseCameraSettings.clearFlags.intValue = (int)selectedClearFlags;
- }
-
- if (!p.baseCameraSettings.clearFlags.hasMultipleDifferentValues)
- {
- if (GetBackgroundType((CameraClearFlags)p.baseCameraSettings.clearFlags.intValue) == BackgroundType.SolidColor)
- {
- using (var group = new EditorGUI.IndentLevelScope())
- {
- p.baseCameraSettings.DrawBackgroundColor();
- }
- }
- }
- }
- EditorGUI.EndProperty();
- EditorGUI.showMixedValue = false;
- }
-
- static void Drawer_Environment_VolumeUpdate(UniversalRenderPipelineSerializedCamera p, Editor owner)
- {
- Rect volumeUpdateRect = EditorGUILayout.GetControlRect();
- EditorGUI.BeginChangeCheck();
- VolumeFrameworkUpdateMode prevVolumeUpdateMode = (VolumeFrameworkUpdateMode)p.volumeFrameworkUpdateMode.intValue;
- VolumeFrameworkUpdateMode selectedValue = (VolumeFrameworkUpdateMode)EditorGUI.EnumPopup(volumeUpdateRect, Styles.volumeUpdates, prevVolumeUpdateMode);
- if (EditorGUI.EndChangeCheck())
- {
- if (p.serializedObject.targetObject is not Camera cam)
- return;
-
- VolumeFrameworkUpdateMode curVolumeUpdateMode = (VolumeFrameworkUpdateMode)p.volumeFrameworkUpdateMode.intValue;
- cam.SetVolumeFrameworkUpdateMode(curVolumeUpdateMode);
- p.volumeFrameworkUpdateMode.intValue = (int)selectedValue;
- }
- }
-
- static void Drawer_Environment_VolumeTrigger(UniversalRenderPipelineSerializedCamera p, Editor owner)
- {
- var controlRect = EditorGUILayout.GetControlRect(true);
- EditorGUI.BeginProperty(controlRect, Styles.volumeTrigger, p.volumeTrigger);
- {
- EditorGUI.BeginChangeCheck();
- var newValue = EditorGUI.ObjectField(controlRect, Styles.volumeTrigger, (Transform)p.volumeTrigger.objectReferenceValue, typeof(Transform), true);
- if (EditorGUI.EndChangeCheck() && !Equals(p.volumeTrigger.objectReferenceValue, newValue))
- p.volumeTrigger.objectReferenceValue = newValue;
- }
- EditorGUI.EndProperty();
- }
- }
- }
- }
|