UnityGame/Library/PackageCache/com.unity.render-pipelines.universal/Editor/Camera/UniversalRenderPipelineCameraUI.Drawers.cs
2024-10-27 10:53:47 +03:00

119 lines
4.6 KiB
C#

using UnityEngine;
using UnityEngine.Rendering.Universal;
namespace UnityEditor.Rendering.Universal
{
using CED = CoreEditorDrawer<UniversalRenderPipelineSerializedCamera>;
static partial class UniversalRenderPipelineCameraUI
{
[URPHelpURL("camera-component-reference")]
public enum Expandable
{
/// <summary> Projection</summary>
Projection = 1 << 0,
/// <summary> Physical</summary>
Physical = 1 << 1,
/// <summary> Output</summary>
Output = 1 << 2,
/// <summary> Orthographic</summary>
Orthographic = 1 << 3,
/// <summary> RenderLoop</summary>
RenderLoop = 1 << 4,
/// <summary> Rendering</summary>
Rendering = 1 << 5,
/// <summary> Environment</summary>
Environment = 1 << 6,
/// <summary> Stack</summary>
Stack = 1 << 7,
}
public enum ExpandableAdditional
{
/// <summary> Rendering</summary>
Rendering = 1 << 0,
}
static readonly ExpandedState<Expandable, Camera> k_ExpandedState = new(Expandable.Projection, "URP");
static readonly AdditionalPropertiesState<ExpandableAdditional, Camera> k_ExpandedAdditionalState = new(0, "URP");
public static readonly CED.IDrawer SectionProjectionSettings = CED.FoldoutGroup(
CameraUI.Styles.projectionSettingsHeaderContent,
Expandable.Projection,
k_ExpandedState,
FoldoutOption.Indent,
CED.Group(
DrawerProjection
),
PhysicalCamera.Drawer
);
public static readonly CED.IDrawer SectionStackSettings =
CED.Conditional(
(serialized, editor) => (CameraRenderType)serialized.cameraType.intValue == CameraRenderType.Base,
CED.FoldoutGroup(Styles.stackSettingsText, Expandable.Stack, k_ExpandedState, FoldoutOption.Indent, CED.Group(DrawerStackCameras)));
public static readonly CED.IDrawer[] Inspector =
{
CED.Group(
DrawerCameraType
),
SectionProjectionSettings,
Rendering.Drawer,
SectionStackSettings,
Environment.Drawer,
Output.Drawer
};
static void DrawerProjection(UniversalRenderPipelineSerializedCamera p, Editor owner)
{
var camera = p.serializedObject.targetObject as Camera;
bool pixelPerfectEnabled = camera.TryGetComponent<PixelPerfectCamera>(out var pixelPerfectCamera) && pixelPerfectCamera.enabled;
if (pixelPerfectEnabled)
EditorGUILayout.HelpBox(Styles.pixelPerfectInfo, MessageType.Info);
using (new EditorGUI.DisabledGroupScope(pixelPerfectEnabled))
CameraUI.Drawer_Projection(p, owner);
}
static void DrawerCameraType(UniversalRenderPipelineSerializedCamera p, Editor owner)
{
int selectedRenderer = p.renderer.intValue;
ScriptableRenderer scriptableRenderer = UniversalRenderPipeline.asset.GetRenderer(selectedRenderer);
bool isDeferred = scriptableRenderer is UniversalRenderer { renderingModeRequested: RenderingMode.Deferred };
EditorGUI.BeginChangeCheck();
CameraRenderType originalCamType = (CameraRenderType)p.cameraType.intValue;
CameraRenderType camType = scriptableRenderer.SupportsCameraStackingType(CameraRenderType.Overlay) ? originalCamType : CameraRenderType.Base;
EditorGUI.BeginDisabledGroup(scriptableRenderer.SupportedCameraStackingTypes() == 0);
camType = (CameraRenderType)EditorGUILayout.EnumPopup(
Styles.cameraType,
camType,
e => scriptableRenderer.SupportsCameraStackingType((CameraRenderType)e),
false
);
EditorGUI.EndDisabledGroup();
if (EditorGUI.EndChangeCheck() || camType != originalCamType)
{
p.cameraType.intValue = (int)camType;
if (camType == CameraRenderType.Overlay)
{
p.baseCameraSettings.clearFlags.intValue = (int)CameraClearFlags.Nothing;
}
}
EditorGUILayout.Space();
}
static void DrawerStackCameras(UniversalRenderPipelineSerializedCamera p, Editor owner)
{
if (owner is UniversalRenderPipelineCameraEditor cameraEditor)
{
cameraEditor.DrawStackSettings();
}
}
}
}