108 lines
4.2 KiB
C#
108 lines
4.2 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,
|
||
|
}
|
||
|
|
||
|
static readonly ExpandedState<Expandable, Camera> k_ExpandedState = new(Expandable.Projection, "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<UnityEngine.Experimental.Rendering.Universal.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 { renderingMode: 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;
|
||
|
}
|
||
|
|
||
|
EditorGUILayout.Space();
|
||
|
}
|
||
|
|
||
|
static void DrawerStackCameras(UniversalRenderPipelineSerializedCamera p, Editor owner)
|
||
|
{
|
||
|
if (owner is UniversalRenderPipelineCameraEditor cameraEditor)
|
||
|
{
|
||
|
cameraEditor.DrawStackSettings();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|