2026-04-16 오브젝트 그림자
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEngine.Rendering;
|
||||
using BadDog.Rendering.AreaLight;
|
||||
|
||||
namespace BadDog.Rendering.AreaLight.Editor
|
||||
{
|
||||
[CustomEditor(typeof(BGAreaLight))]
|
||||
[CanEditMultipleObjects]
|
||||
public class BGAreaLightEditor : UnityEditor.Editor
|
||||
{
|
||||
private SerializedProperty m_CastShadows;
|
||||
private SerializedProperty m_UseCustomShadow;
|
||||
private SerializedProperty m_CustomShadowResolution;
|
||||
private SerializedProperty m_ShadowCone;
|
||||
private SerializedProperty m_ShadowStrength;
|
||||
private SerializedProperty m_ShadowNormalBias;
|
||||
private SerializedProperty m_ShadowDepthBias;
|
||||
private SerializedProperty m_ShadowNearPlane;
|
||||
private SerializedProperty m_RenderingLayerMask;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
m_CastShadows = serializedObject.FindProperty("m_CastShadows");
|
||||
m_UseCustomShadow = serializedObject.FindProperty("m_UseCustomShadow");
|
||||
m_CustomShadowResolution = serializedObject.FindProperty("m_CustomShadowResolution");
|
||||
m_ShadowCone = serializedObject.FindProperty("m_ShadowCone");
|
||||
m_ShadowStrength = serializedObject.FindProperty("m_ShadowStrength");
|
||||
m_ShadowNormalBias = serializedObject.FindProperty("m_ShadowNormalBias");
|
||||
m_ShadowDepthBias = serializedObject.FindProperty("m_ShadowDepthBias");
|
||||
m_ShadowNearPlane = serializedObject.FindProperty("m_ShadowNearPlane");
|
||||
m_RenderingLayerMask = serializedObject.FindProperty("m_RenderingLayerMask");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
|
||||
// Cast Shadows toggle
|
||||
EditorGUILayout.PropertyField(m_CastShadows, new GUIContent("Cast Shadows", "Enable shadow casting for this area light."));
|
||||
|
||||
EditorGUILayout.Space();
|
||||
|
||||
// Disable all shadow settings if Cast Shadows is off
|
||||
EditorGUI.BeginDisabledGroup(!m_CastShadows.boolValue);
|
||||
|
||||
EditorGUILayout.PropertyField(m_UseCustomShadow, new GUIContent("Custom Shadow", "Enable custom shadow settings for this area light."));
|
||||
|
||||
EditorGUILayout.Space();
|
||||
|
||||
EditorGUI.indentLevel++;
|
||||
|
||||
if (!m_UseCustomShadow.boolValue)
|
||||
{
|
||||
m_CustomShadowResolution.intValue = 0;
|
||||
m_ShadowCone.floatValue = AreaShadowUtils.k_DefaultAreaLightShadowCone;
|
||||
m_ShadowStrength.floatValue = 1f;
|
||||
m_ShadowNormalBias.floatValue = 0.0f;
|
||||
m_ShadowDepthBias.floatValue = 0.05f;
|
||||
m_ShadowNearPlane.floatValue = 0.05f;
|
||||
}
|
||||
|
||||
EditorGUI.BeginDisabledGroup(!m_UseCustomShadow.boolValue);
|
||||
EditorGUILayout.PropertyField(m_CustomShadowResolution);
|
||||
EditorGUILayout.PropertyField(m_ShadowCone);
|
||||
EditorGUILayout.PropertyField(m_ShadowStrength);
|
||||
EditorGUILayout.PropertyField(m_ShadowNormalBias);
|
||||
EditorGUILayout.PropertyField(m_ShadowDepthBias);
|
||||
EditorGUILayout.PropertyField(m_ShadowNearPlane);
|
||||
EditorGUI.EndDisabledGroup();
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
EditorGUI.EndDisabledGroup(); // End Cast Shadows disabled group
|
||||
|
||||
EditorGUILayout.Space();
|
||||
DrawRenderingLayersField();
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
private void DrawRenderingLayersField()
|
||||
{
|
||||
EditorGUI.showMixedValue = m_RenderingLayerMask.hasMultipleDifferentValues;
|
||||
EditorGUI.BeginChangeCheck();
|
||||
uint mask = m_RenderingLayerMask.uintValue;
|
||||
mask = EditorGUILayout.RenderingLayerMaskField(
|
||||
new GUIContent("Rendering Layers", "Rendering Layer Mask used for area light lighting/shadow filtering."),
|
||||
mask);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
m_RenderingLayerMask.uintValue = mask;
|
||||
}
|
||||
EditorGUI.showMixedValue = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user