Нема описа
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.Environment.Drawers.cs 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. namespace UnityEditor.Rendering.Universal
  2. {
  3. using UnityEngine;
  4. using UnityEngine.Rendering.Universal;
  5. using CED = CoreEditorDrawer<UniversalRenderPipelineSerializedCamera>;
  6. static partial class UniversalRenderPipelineCameraUI
  7. {
  8. public partial class Environment
  9. {
  10. internal enum BackgroundType
  11. {
  12. Skybox = 0,
  13. SolidColor,
  14. [InspectorName("Uninitialized")]
  15. DontCare,
  16. }
  17. public static readonly CED.IDrawer Drawer;
  18. static Environment()
  19. {
  20. Drawer = CED.FoldoutGroup(
  21. CameraUI.Environment.Styles.header,
  22. Expandable.Environment,
  23. k_ExpandedState,
  24. FoldoutOption.Indent,
  25. CED.Conditional(
  26. (serialized, owner) => (CameraRenderType)serialized.cameraType.intValue == CameraRenderType.Base,
  27. CED.Group(
  28. Drawer_Environment_ClearFlags
  29. )
  30. ),
  31. CED.Group(
  32. Styles.volumesSettingsText,
  33. CED.Group(
  34. GroupOption.Indent,
  35. Drawer_Environment_VolumeUpdate,
  36. CameraUI.Environment.Drawer_Environment_VolumeLayerMask,
  37. Drawer_Environment_VolumeTrigger
  38. )
  39. )
  40. );
  41. }
  42. static BackgroundType GetBackgroundType(CameraClearFlags clearFlags)
  43. {
  44. switch (clearFlags)
  45. {
  46. case CameraClearFlags.Skybox:
  47. return BackgroundType.Skybox;
  48. case CameraClearFlags.Nothing:
  49. return BackgroundType.DontCare;
  50. // DepthOnly is not supported by design in UniversalRP. We upgrade it to SolidColor
  51. default:
  52. return BackgroundType.SolidColor;
  53. }
  54. }
  55. static void Drawer_Environment_ClearFlags(UniversalRenderPipelineSerializedCamera p, Editor owner)
  56. {
  57. EditorGUI.showMixedValue = p.baseCameraSettings.clearFlags.hasMultipleDifferentValues;
  58. Rect clearFlagsRect = EditorGUILayout.GetControlRect();
  59. EditorGUI.BeginProperty(clearFlagsRect, Styles.backgroundType, p.baseCameraSettings.clearFlags);
  60. {
  61. EditorGUI.BeginChangeCheck();
  62. BackgroundType backgroundType = GetBackgroundType((CameraClearFlags)p.baseCameraSettings.clearFlags.intValue);
  63. var selectedValue = (BackgroundType)EditorGUI.EnumPopup(clearFlagsRect, Styles.backgroundType, backgroundType);
  64. if (EditorGUI.EndChangeCheck())
  65. {
  66. CameraClearFlags selectedClearFlags;
  67. switch (selectedValue)
  68. {
  69. case BackgroundType.Skybox:
  70. selectedClearFlags = CameraClearFlags.Skybox;
  71. break;
  72. case BackgroundType.DontCare:
  73. selectedClearFlags = CameraClearFlags.Nothing;
  74. break;
  75. default:
  76. selectedClearFlags = CameraClearFlags.SolidColor;
  77. break;
  78. }
  79. p.baseCameraSettings.clearFlags.intValue = (int)selectedClearFlags;
  80. }
  81. if (!p.baseCameraSettings.clearFlags.hasMultipleDifferentValues)
  82. {
  83. if (GetBackgroundType((CameraClearFlags)p.baseCameraSettings.clearFlags.intValue) == BackgroundType.SolidColor)
  84. {
  85. using (var group = new EditorGUI.IndentLevelScope())
  86. {
  87. p.baseCameraSettings.DrawBackgroundColor();
  88. }
  89. }
  90. }
  91. }
  92. EditorGUI.EndProperty();
  93. EditorGUI.showMixedValue = false;
  94. }
  95. static void Drawer_Environment_VolumeUpdate(UniversalRenderPipelineSerializedCamera p, Editor owner)
  96. {
  97. Rect volumeUpdateRect = EditorGUILayout.GetControlRect();
  98. EditorGUI.BeginChangeCheck();
  99. VolumeFrameworkUpdateMode prevVolumeUpdateMode = (VolumeFrameworkUpdateMode)p.volumeFrameworkUpdateMode.intValue;
  100. VolumeFrameworkUpdateMode selectedValue = (VolumeFrameworkUpdateMode)EditorGUI.EnumPopup(volumeUpdateRect, Styles.volumeUpdates, prevVolumeUpdateMode);
  101. if (EditorGUI.EndChangeCheck())
  102. {
  103. if (p.serializedObject.targetObject is not Camera cam)
  104. return;
  105. VolumeFrameworkUpdateMode curVolumeUpdateMode = (VolumeFrameworkUpdateMode)p.volumeFrameworkUpdateMode.intValue;
  106. cam.SetVolumeFrameworkUpdateMode(curVolumeUpdateMode);
  107. p.volumeFrameworkUpdateMode.intValue = (int)selectedValue;
  108. }
  109. }
  110. static void Drawer_Environment_VolumeTrigger(UniversalRenderPipelineSerializedCamera p, Editor owner)
  111. {
  112. var controlRect = EditorGUILayout.GetControlRect(true);
  113. EditorGUI.BeginProperty(controlRect, Styles.volumeTrigger, p.volumeTrigger);
  114. {
  115. EditorGUI.BeginChangeCheck();
  116. var newValue = EditorGUI.ObjectField(controlRect, Styles.volumeTrigger, (Transform)p.volumeTrigger.objectReferenceValue, typeof(Transform), true);
  117. if (EditorGUI.EndChangeCheck() && !Equals(p.volumeTrigger.objectReferenceValue, newValue))
  118. p.volumeTrigger.objectReferenceValue = newValue;
  119. }
  120. EditorGUI.EndProperty();
  121. }
  122. }
  123. }
  124. }