123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- using UnityEditor.EditorTools;
- using UnityEditor.Rendering.Universal.Path2D;
- using UnityEngine;
- using UnityEngine.Rendering.Universal;
-
- namespace UnityEditor.Rendering.Universal
- {
- internal class ShadowCasterPath : ScriptablePath
- {
- internal Bounds GetBounds()
- {
- ShadowCaster2D shadowCaster = (ShadowCaster2D)owner;
- Renderer m_Renderer = shadowCaster.GetComponent<Renderer>();
- if (m_Renderer != null)
- {
- return m_Renderer.bounds;
- }
- else
- {
- Collider2D collider = shadowCaster.GetComponent<Collider2D>();
- if (collider != null)
- return collider.bounds;
- }
-
- return new Bounds(shadowCaster.transform.position, shadowCaster.transform.lossyScale);
- }
-
- public override void SetDefaultShape()
- {
- Clear();
- Bounds bounds = GetBounds();
-
- AddPoint(new ControlPoint(bounds.min));
- AddPoint(new ControlPoint(new Vector3(bounds.min.x, bounds.max.y)));
- AddPoint(new ControlPoint(bounds.max));
- AddPoint(new ControlPoint(new Vector3(bounds.max.x, bounds.min.y)));
-
- base.SetDefaultShape();
- }
- }
-
-
- [CustomEditor(typeof(ShadowCaster2D))]
- [CanEditMultipleObjects]
- internal class ShadowCaster2DEditor : PathComponentEditor<ShadowCasterPath>
- {
- [EditorTool("Edit Shadow Caster Shape", typeof(ShadowCaster2D))]
- class ShadowCaster2DShadowCasterShapeTool : ShadowCaster2DShapeTool {};
-
- private static class Styles
- {
- public static GUIContent shadowShape2DProvider = EditorGUIUtility.TrTextContent("Shadow Shape 2D Provider", "");
- public static GUIContent castsShadows = EditorGUIUtility.TrTextContent("Casts Shadows", "Specifies if this renderer will cast shadows");
- public static GUIContent castingSourcePrefixLabel = EditorGUIUtility.TrTextContent("Casting Source", "Specifies the source used for projected shadows");
- public static GUIContent sortingLayerPrefixLabel = EditorGUIUtility.TrTextContent("Target Sorting Layers", "Apply shadows to the specified sorting layers.");
- public static GUIContent shadowShapeTrim = EditorGUIUtility.TrTextContent("Trim Edge", "This contracts the edge of the shape given by the shape provider by the specified amount");
- public static GUIContent alphaCutoff = EditorGUIUtility.TrTextContent("Alpha Cutoff", "Required for correct unshadowed sprite overlap.");
- public static GUIContent castingOption = EditorGUIUtility.TrTextContent("Casting Option", "Specifies how to draw the shadow used with the ShadowCaster2D");
- public static GUIContent castingSource = EditorGUIUtility.TrTextContent("Casting Source", "Specifies the source of the shape used for projected shadows");
- }
-
- SerializedProperty m_CastingOption;
- SerializedProperty m_CastsShadows;
- SerializedProperty m_CastingSource;
- SerializedProperty m_ShadowMesh;
- SerializedProperty m_TrimEdge;
- SerializedProperty m_AlphaCutoff;
- SerializedProperty m_ShadowShape2DProvider;
- SortingLayerDropDown m_SortingLayerDropDown;
- CastingSourceDropDown m_CastingSourceDropDown;
-
-
- public void OnEnable()
- {
- m_CastingOption = serializedObject.FindProperty("m_CastingOption");
- m_CastsShadows = serializedObject.FindProperty("m_CastsShadows");
- m_CastingSource = serializedObject.FindProperty("m_ShadowCastingSource");
- m_ShadowMesh = serializedObject.FindProperty("m_ShadowMesh");
- m_AlphaCutoff = serializedObject.FindProperty("m_AlphaCutoff");
- m_TrimEdge = m_ShadowMesh.FindPropertyRelative("m_TrimEdge");
- m_ShadowShape2DProvider = serializedObject.FindProperty("m_ShadowShape2DProvider");
-
- m_SortingLayerDropDown = new SortingLayerDropDown();
- m_SortingLayerDropDown.OnEnable(serializedObject, "m_ApplyToSortingLayers");
-
- m_CastingSourceDropDown = new CastingSourceDropDown();
- }
-
- public void ShadowCaster2DSceneGUI()
- {
- ShadowCaster2D shadowCaster = target as ShadowCaster2D;
-
- Transform t = shadowCaster.transform;
- shadowCaster.DrawPreviewOutline();
- }
-
- public void ShadowCaster2DInspectorGUI<T>() where T : ShadowCaster2DShapeTool
- {
- DoEditButton<T>(PathEditorToolContents.icon, "Edit Shape");
- DoPathInspector<T>();
- DoSnappingInspector<T>();
- }
-
- public void OnSceneGUI()
- {
- if (m_CastsShadows.boolValue)
- ShadowCaster2DSceneGUI();
- }
-
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
-
- m_CastingSourceDropDown.OnCastingSource(serializedObject, targets, Styles.castingSourcePrefixLabel);
-
- EditorGUILayout.PropertyField(m_CastingOption, Styles.castingOption);
- m_SortingLayerDropDown.OnTargetSortingLayers(serializedObject, targets, Styles.sortingLayerPrefixLabel, null);
-
- bool usingShapeProvider = m_CastingSource.intValue == (int)ShadowCaster2D.ShadowCastingSources.ShapeProvider;
- if (usingShapeProvider)
- {
- EditorGUILayout.PropertyField(m_TrimEdge, Styles.shadowShapeTrim);
- if (m_TrimEdge.floatValue < 0)
- m_TrimEdge.floatValue = 0;
-
- EditorGUILayout.PropertyField(m_AlphaCutoff, Styles.alphaCutoff);
- }
-
- if ((ShadowCaster2D.ShadowCastingSources)m_CastingSource.intValue == ShadowCaster2D.ShadowCastingSources.ShapeEditor)
- ShadowCaster2DInspectorGUI<ShadowCaster2DShadowCasterShapeTool>();
- else if (EditorToolManager.IsActiveTool<ShadowCaster2DShadowCasterShapeTool>())
- ToolManager.RestorePreviousTool();
-
- EditorGUILayout.PropertyField(m_ShadowShape2DProvider, Styles.shadowShape2DProvider, true);
-
- serializedObject.ApplyModifiedProperties();
- }
- }
- }
|