Skip to content

Commit 30629e5

Browse files
committed
feat: gradation feature
close #277
1 parent ef18e70 commit 30629e5

File tree

6 files changed

+411
-0
lines changed

6 files changed

+411
-0
lines changed

Packages/src/Editor/UIEffectEditor.cs

+30
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ public class UIEffect2Editor : Editor
5858
private SerializedProperty _shadowEffectOnOrigin;
5959
private SerializedProperty _shadowMirrorScale;
6060

61+
private SerializedProperty _gradationMode;
62+
private SerializedProperty _gradationColor1;
63+
private SerializedProperty _gradationColor2;
64+
private SerializedProperty _gradationGradient;
65+
6166
private void OnEnable()
6267
{
6368
if (target == null) return;
@@ -104,6 +109,11 @@ private void OnEnable()
104109
_shadowFade = serializedObject.FindProperty("m_ShadowFade");
105110
_shadowEffectOnOrigin = serializedObject.FindProperty("m_ShadowEffectOnOrigin");
106111
_shadowMirrorScale = serializedObject.FindProperty("m_ShadowMirrorScale");
112+
113+
_gradationMode = serializedObject.FindProperty("m_GradationMode");
114+
_gradationColor1 = serializedObject.FindProperty("m_GradationColor1");
115+
_gradationColor2 = serializedObject.FindProperty("m_GradationColor2");
116+
_gradationGradient = serializedObject.FindProperty("m_GradationGradient");
107117
}
108118

109119
public override void OnInspectorGUI()
@@ -233,6 +243,26 @@ public void DrawProperties()
233243
EditorGUILayout.PropertyField(_shadowEffectOnOrigin);
234244
EditorGUI.indentLevel--;
235245
}
246+
247+
// Gradient
248+
DrawSeparator();
249+
if (DrawHeaderPopup(_gradationMode))
250+
{
251+
EditorGUI.indentLevel++;
252+
switch ((GradationMode)_gradationMode.intValue)
253+
{
254+
case GradationMode.HorizontalGradient:
255+
case GradationMode.VerticalGradient:
256+
EditorGUILayout.PropertyField(_gradationGradient);
257+
break;
258+
default:
259+
EditorGUILayout.PropertyField(_gradationColor1);
260+
EditorGUILayout.PropertyField(_gradationColor2);
261+
break;
262+
}
263+
264+
EditorGUI.indentLevel--;
265+
}
236266
}
237267

238268
private static void DrawColor(SerializedProperty filter, SerializedProperty color, ColorFilter prevFilter)

Packages/src/Runtime/Enums.cs

+12
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,18 @@ public enum ShadowMode
7676
Mirror
7777
}
7878

79+
public enum GradationMode
80+
{
81+
None = 0,
82+
Horizontal,
83+
HorizontalGradient,
84+
Vertical,
85+
VerticalGradient,
86+
Radial,
87+
DiagonalLeftTopToRightBottom,
88+
DiagonalRightTopToLeftBottom,
89+
}
90+
7991
public enum PreferSamplingSize
8092
{
8193
None = 0,

Packages/src/Runtime/UIEffect.cs

+65
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@ public class UIEffect : UIEffectBase
127127
[SerializeField]
128128
protected float m_ShadowMirrorScale = 0.5f;
129129

130+
[SerializeField]
131+
protected GradationMode m_GradationMode = GradationMode.None;
132+
133+
[SerializeField]
134+
protected Color m_GradationColor1 = Color.white;
135+
136+
[SerializeField]
137+
protected Color m_GradationColor2 = Color.white;
138+
139+
[SerializeField]
140+
private Gradient m_GradationGradient = new Gradient();
141+
130142
public ToneFilter toneFilter
131143
{
132144
get => m_ToneFilter;
@@ -521,6 +533,50 @@ public float shadowMirrorScale
521533
}
522534
}
523535

536+
public GradationMode gradationMode
537+
{
538+
get => m_GradationMode;
539+
set
540+
{
541+
if (m_GradationMode == value) return;
542+
context.gradationMode = m_GradationMode = value;
543+
SetVerticesDirty();
544+
}
545+
}
546+
547+
public Color gradationColor1
548+
{
549+
get => m_GradationColor1;
550+
set
551+
{
552+
if (m_GradationColor1 == value) return;
553+
context.gradationColor1 = m_GradationColor1 = value;
554+
SetVerticesDirty();
555+
}
556+
}
557+
558+
public Color gradationColor2
559+
{
560+
get => m_GradationColor2;
561+
set
562+
{
563+
if (m_GradationColor2 == value) return;
564+
context.gradationColor2 = m_GradationColor2 = value;
565+
SetVerticesDirty();
566+
}
567+
}
568+
569+
public Gradient gradationGradient
570+
{
571+
get => m_GradationGradient;
572+
set
573+
{
574+
if (m_GradationGradient == value) return;
575+
context.gradationGradient = m_GradationGradient = value;
576+
SetVerticesDirty();
577+
}
578+
}
579+
524580
public List<UIEffectReplica> replicas => _replicas ??= ListPool<UIEffectReplica>.Rent();
525581
private List<UIEffectReplica> _replicas;
526582

@@ -604,6 +660,10 @@ protected override void UpdateContext(UIEffectContext c)
604660
c.shadowFade = m_ShadowFade;
605661
c.shadowEffectOnOrigin = m_ShadowEffectOnOrigin;
606662
c.shadowMirrorScale = m_ShadowMirrorScale;
663+
c.gradationMode = m_GradationMode;
664+
c.gradationColor1 = m_GradationColor1;
665+
c.gradationColor2 = m_GradationColor2;
666+
c.gradationGradient = m_GradationGradient;
607667
}
608668

609669
public override void ApplyContextToMaterial()
@@ -749,6 +809,11 @@ internal void CopyFrom(UIEffectContext c)
749809
m_ShadowEffectOnOrigin = c.shadowEffectOnOrigin;
750810
m_ShadowMirrorScale = c.shadowMirrorScale;
751811

812+
m_GradationMode = c.gradationMode;
813+
m_GradationColor1 = c.gradationColor1;
814+
m_GradationColor2 = c.gradationColor2;
815+
m_GradationGradient = c.gradationGradient;
816+
752817
UpdateContext(context);
753818
ApplyContextToMaterial();
754819
SetVerticesDirty();

Packages/src/Runtime/UIEffectContext.cs

+12
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@ public class UIEffectContext
132132
public float shadowFade = 0.9f;
133133
public bool shadowEffectOnOrigin = false;
134134
public float shadowMirrorScale = 0.5f;
135+
public GradationMode gradationMode;
136+
public Color gradationColor1;
137+
public Color gradationColor2;
138+
public Gradient gradationGradient;
135139

136140
public bool willModifyMaterial => samplingFilter != SamplingFilter.None
137141
|| transitionFilter != TransitionFilter.None
@@ -184,6 +188,11 @@ public void CopyFrom(UIEffectContext preset)
184188
shadowIteration = preset.shadowIteration;
185189
shadowFade = preset.shadowFade;
186190
shadowEffectOnOrigin = preset.shadowEffectOnOrigin;
191+
192+
gradationMode = preset.gradationMode;
193+
gradationColor1 = preset.gradationColor1;
194+
gradationColor2 = preset.gradationColor2;
195+
gradationGradient = preset.gradationGradient;
187196
}
188197

189198
public void ApplyToMaterial(Material material, float actualSamplingScale = 1f)
@@ -385,6 +394,9 @@ public void ModifyMesh(Graphic graphic, RectTransform transitionRoot, VertexHelp
385394
}
386395
}
387396
}
397+
398+
// Apply gradation.
399+
GradientUtil.DoGradient(gradationMode, s_WorkingVertices, gradationColor1, gradationColor2, gradationGradient, rect);
388400

389401
// Apply shadow.
390402
if (shadowMode != ShadowMode.None)

0 commit comments

Comments
 (0)