WuhuIslandTesting/Library/PackageCache/com.unity.render-pipelines.universal@8148.0.7-4/Editor/UniversalRenderPipelineLightEditor.cs
2025-01-07 02:06:59 +01:00

116 lines
4.3 KiB
C#

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace UnityEditor.Rendering.Universal
{
[CanEditMultipleObjects]
[CustomEditorForRenderPipeline(typeof(Light), typeof(UniversalRenderPipelineAsset))]
class UniversalRenderPipelineLightEditor : LightEditor
{
UniversalRenderPipelineSerializedLight serializedLight { get; set; }
protected override void OnEnable()
{
serializedLight = new UniversalRenderPipelineSerializedLight(serializedObject, settings);
}
// IsPreset is an internal API - lets reuse the usable part of this function
// 93 is a "magic number" and does not represent a combination of other flags here
internal static bool IsPresetEditor(UnityEditor.Editor editor)
{
return (int)((editor.target as Component).gameObject.hideFlags) == 93;
}
bool showvolume = false;
public override void OnInspectorGUI()
{
serializedLight.Update();
if (IsPresetEditor(this))
{
UniversalRenderPipelineLightUI.PresetInspector.Draw(serializedLight, this);
}
else
{
UniversalRenderPipelineLightUI.Inspector.Draw(serializedLight, this);
}
Light light = (Light)target ;
if (light.lightmapBakeType != LightmapBakeType.Realtime)
{
//Clamping range to the lowset possible value in 12bit precision.
//Baked Lights should techically be infinite range with a simple inverse square falloff, but Unity has a bug with how range affects baked lights and will not render correctly if the values are too high.
//light.range = Mathf.Sqrt(light.intensity / 0.000244140625f);
}
// CED.FoldoutGroup(LightUI.Styles.shapeHeader, Expandable.Shape, k_ExpandedState, DrawShapeContent),
//CoreEditorDrawer.FoldoutGroup(LightUI.Styles.shapeHeader);
//showvolume = EditorGUILayout.BeginFoldoutHeaderGroup(showvolume, "Dropdown");
//if (showvolume)
//{
// GUILayout.Label("This is a Label in a Custom Editor");
//}
//EditorGUILayout.EndFoldoutHeaderGroup();
serializedLight.Apply();
}
protected override void OnSceneGUI()
{
if (!(GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset))
return;
if (!(target is Light light) || light == null)
return;
switch (light.type)
{
case LightType.Spot:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawSpotLightGizmo(light);
}
break;
case LightType.Point:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, Quaternion.identity, Vector3.one)))
{
CoreLightEditorUtilities.DrawPointLightGizmo(light);
}
break;
case LightType.Rectangle:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawRectangleLightGizmo(light);
}
break;
case LightType.Disc:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawDiscLightGizmo(light);
}
break;
case LightType.Directional:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawDirectionalLightGizmo(light);
}
break;
default:
base.OnSceneGUI();
break;
}
}
}
}