暫無描述
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.

UniversalRenderPipelineCameraUI.Drawers.cs 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using UnityEngine;
  2. using UnityEngine.Rendering.Universal;
  3. namespace UnityEditor.Rendering.Universal
  4. {
  5. using CED = CoreEditorDrawer<UniversalRenderPipelineSerializedCamera>;
  6. static partial class UniversalRenderPipelineCameraUI
  7. {
  8. [URPHelpURL("camera-component-reference")]
  9. public enum Expandable
  10. {
  11. /// <summary> Projection</summary>
  12. Projection = 1 << 0,
  13. /// <summary> Physical</summary>
  14. Physical = 1 << 1,
  15. /// <summary> Output</summary>
  16. Output = 1 << 2,
  17. /// <summary> Orthographic</summary>
  18. Orthographic = 1 << 3,
  19. /// <summary> RenderLoop</summary>
  20. RenderLoop = 1 << 4,
  21. /// <summary> Rendering</summary>
  22. Rendering = 1 << 5,
  23. /// <summary> Environment</summary>
  24. Environment = 1 << 6,
  25. /// <summary> Stack</summary>
  26. Stack = 1 << 7,
  27. }
  28. public enum ExpandableAdditional
  29. {
  30. /// <summary> Rendering</summary>
  31. Rendering = 1 << 0,
  32. }
  33. static readonly ExpandedState<Expandable, Camera> k_ExpandedState = new(Expandable.Projection, "URP");
  34. static readonly AdditionalPropertiesState<ExpandableAdditional, Camera> k_ExpandedAdditionalState = new(0, "URP");
  35. public static readonly CED.IDrawer SectionProjectionSettings = CED.FoldoutGroup(
  36. CameraUI.Styles.projectionSettingsHeaderContent,
  37. Expandable.Projection,
  38. k_ExpandedState,
  39. FoldoutOption.Indent,
  40. CED.Group(
  41. DrawerProjection
  42. ),
  43. PhysicalCamera.Drawer
  44. );
  45. public static readonly CED.IDrawer SectionStackSettings =
  46. CED.Conditional(
  47. (serialized, editor) => (CameraRenderType)serialized.cameraType.intValue == CameraRenderType.Base,
  48. CED.FoldoutGroup(Styles.stackSettingsText, Expandable.Stack, k_ExpandedState, FoldoutOption.Indent, CED.Group(DrawerStackCameras)));
  49. public static readonly CED.IDrawer[] Inspector =
  50. {
  51. CED.Group(
  52. DrawerCameraType
  53. ),
  54. SectionProjectionSettings,
  55. Rendering.Drawer,
  56. SectionStackSettings,
  57. Environment.Drawer,
  58. Output.Drawer
  59. };
  60. static void DrawerProjection(UniversalRenderPipelineSerializedCamera p, Editor owner)
  61. {
  62. var camera = p.serializedObject.targetObject as Camera;
  63. bool pixelPerfectEnabled = camera.TryGetComponent<PixelPerfectCamera>(out var pixelPerfectCamera) && pixelPerfectCamera.enabled;
  64. if (pixelPerfectEnabled)
  65. EditorGUILayout.HelpBox(Styles.pixelPerfectInfo, MessageType.Info);
  66. using (new EditorGUI.DisabledGroupScope(pixelPerfectEnabled))
  67. CameraUI.Drawer_Projection(p, owner);
  68. }
  69. static void DrawerCameraType(UniversalRenderPipelineSerializedCamera p, Editor owner)
  70. {
  71. int selectedRenderer = p.renderer.intValue;
  72. ScriptableRenderer scriptableRenderer = UniversalRenderPipeline.asset.GetRenderer(selectedRenderer);
  73. bool isDeferred = scriptableRenderer is UniversalRenderer { renderingModeRequested: RenderingMode.Deferred };
  74. EditorGUI.BeginChangeCheck();
  75. CameraRenderType originalCamType = (CameraRenderType)p.cameraType.intValue;
  76. CameraRenderType camType = scriptableRenderer.SupportsCameraStackingType(CameraRenderType.Overlay) ? originalCamType : CameraRenderType.Base;
  77. EditorGUI.BeginDisabledGroup(scriptableRenderer.SupportedCameraStackingTypes() == 0);
  78. camType = (CameraRenderType)EditorGUILayout.EnumPopup(
  79. Styles.cameraType,
  80. camType,
  81. e => scriptableRenderer.SupportsCameraStackingType((CameraRenderType)e),
  82. false
  83. );
  84. EditorGUI.EndDisabledGroup();
  85. if (EditorGUI.EndChangeCheck() || camType != originalCamType)
  86. {
  87. p.cameraType.intValue = (int)camType;
  88. if (camType == CameraRenderType.Overlay)
  89. {
  90. p.baseCameraSettings.clearFlags.intValue = (int)CameraClearFlags.Nothing;
  91. }
  92. }
  93. EditorGUILayout.Space();
  94. }
  95. static void DrawerStackCameras(UniversalRenderPipelineSerializedCamera p, Editor owner)
  96. {
  97. if (owner is UniversalRenderPipelineCameraEditor cameraEditor)
  98. {
  99. cameraEditor.DrawStackSettings();
  100. }
  101. }
  102. }
  103. }