改动与优化
This commit is contained in:
@@ -8,8 +8,10 @@ public class UI_SettingsPanelEnterAnim : MonoBehaviour
|
||||
[SerializeField] private CanvasGroup fadeTarget;
|
||||
[SerializeField] private bool playOnEnable = true;
|
||||
[SerializeField] private float enterDuration = 0.3f;
|
||||
[SerializeField] private float exitDuration = 0.18f;
|
||||
[SerializeField] private float fromOffsetY = 32f;
|
||||
[SerializeField] private Ease enterEase = Ease.OutCubic;
|
||||
[SerializeField] private Ease exitEase = Ease.InCubic;
|
||||
[SerializeField] private bool useUnscaledTime = true;
|
||||
|
||||
private Sequence enterSequence;
|
||||
@@ -44,13 +46,20 @@ public class UI_SettingsPanelEnterAnim : MonoBehaviour
|
||||
|
||||
KillTween();
|
||||
|
||||
moveTarget.anchoredPosition = basePos - new Vector2(0f, Mathf.Abs(fromOffsetY));
|
||||
bool canAnimateTransform = !UI_OrderedEntryAnimator.IsLayoutSensitive(moveTarget);
|
||||
if (canAnimateTransform)
|
||||
{
|
||||
moveTarget.anchoredPosition = basePos - new Vector2(0f, Mathf.Abs(fromOffsetY));
|
||||
}
|
||||
fadeTarget.alpha = 0f;
|
||||
fadeTarget.interactable = false;
|
||||
fadeTarget.blocksRaycasts = false;
|
||||
|
||||
enterSequence = DOTween.Sequence().SetUpdate(useUnscaledTime);
|
||||
enterSequence.Join(moveTarget.DOAnchorPos(basePos, Mathf.Max(0.01f, enterDuration)).SetEase(enterEase));
|
||||
if (canAnimateTransform)
|
||||
{
|
||||
enterSequence.Join(moveTarget.DOAnchorPos(basePos, Mathf.Max(0.01f, enterDuration)).SetEase(enterEase));
|
||||
}
|
||||
enterSequence.Join(fadeTarget.DOFade(1f, Mathf.Max(0.01f, enterDuration)).SetEase(Ease.OutCubic));
|
||||
enterSequence.OnComplete(() =>
|
||||
{
|
||||
@@ -58,6 +67,50 @@ public class UI_SettingsPanelEnterAnim : MonoBehaviour
|
||||
fadeTarget.blocksRaycasts = true;
|
||||
enterSequence = null;
|
||||
});
|
||||
enterSequence.OnKill(() =>
|
||||
{
|
||||
ResetToBase();
|
||||
enterSequence = null;
|
||||
});
|
||||
}
|
||||
|
||||
public void PlayExitThen(System.Action onComplete)
|
||||
{
|
||||
AutoWire();
|
||||
CacheBasePos();
|
||||
|
||||
if (moveTarget == null || fadeTarget == null)
|
||||
{
|
||||
onComplete?.Invoke();
|
||||
return;
|
||||
}
|
||||
|
||||
KillTween();
|
||||
|
||||
fadeTarget.interactable = false;
|
||||
fadeTarget.blocksRaycasts = false;
|
||||
|
||||
Vector2 targetPos = basePos - new Vector2(0f, Mathf.Abs(fromOffsetY));
|
||||
float duration = Mathf.Max(0.01f, exitDuration);
|
||||
bool canAnimateTransform = !UI_OrderedEntryAnimator.IsLayoutSensitive(moveTarget);
|
||||
|
||||
enterSequence = DOTween.Sequence().SetUpdate(useUnscaledTime);
|
||||
if (canAnimateTransform)
|
||||
{
|
||||
enterSequence.Join(moveTarget.DOAnchorPos(targetPos, duration).SetEase(exitEase));
|
||||
}
|
||||
enterSequence.Join(fadeTarget.DOFade(0f, duration).SetEase(Ease.InCubic));
|
||||
enterSequence.OnComplete(() =>
|
||||
{
|
||||
enterSequence = null;
|
||||
ResetToBase();
|
||||
onComplete?.Invoke();
|
||||
});
|
||||
enterSequence.OnKill(() =>
|
||||
{
|
||||
ResetToBase();
|
||||
enterSequence = null;
|
||||
});
|
||||
}
|
||||
|
||||
private void AutoWire()
|
||||
@@ -90,7 +143,10 @@ public class UI_SettingsPanelEnterAnim : MonoBehaviour
|
||||
private void ResetToBase()
|
||||
{
|
||||
if (moveTarget != null && basePosCached)
|
||||
moveTarget.anchoredPosition = basePos;
|
||||
{
|
||||
if (!UI_OrderedEntryAnimator.IsLayoutSensitive(moveTarget))
|
||||
moveTarget.anchoredPosition = basePos;
|
||||
}
|
||||
|
||||
if (fadeTarget != null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user