改动与优化
This commit is contained in:
@@ -23,6 +23,7 @@ public class ui_Panel_Setting : MonoBehaviour
|
||||
private readonly List<RectTransform> enterItems = new List<RectTransform>();
|
||||
private readonly List<CanvasGroup> enterGroups = new List<CanvasGroup>();
|
||||
private readonly List<Vector2> enterBasePos = new List<Vector2>();
|
||||
private readonly List<bool> enterRestoreTransform = new List<bool>();
|
||||
private Sequence enterSequence;
|
||||
|
||||
private void Awake()
|
||||
@@ -86,6 +87,7 @@ public class ui_Panel_Setting : MonoBehaviour
|
||||
RectTransform rt = enterItems[i];
|
||||
CanvasGroup cg = enterGroups[i];
|
||||
Vector2 basePos = enterBasePos[i];
|
||||
bool restoreTransform = i < enterRestoreTransform.Count && enterRestoreTransform[i];
|
||||
|
||||
if (rt == null || cg == null)
|
||||
continue;
|
||||
@@ -93,19 +95,28 @@ public class ui_Panel_Setting : MonoBehaviour
|
||||
rt.DOKill();
|
||||
cg.DOKill();
|
||||
|
||||
rt.anchoredPosition = basePos - new Vector2(0f, Mathf.Abs(enterOffsetY));
|
||||
if (restoreTransform)
|
||||
{
|
||||
rt.anchoredPosition = basePos - new Vector2(0f, Mathf.Abs(enterOffsetY));
|
||||
}
|
||||
cg.alpha = 0f;
|
||||
|
||||
float start = i * Mathf.Max(0f, enterItemStagger);
|
||||
enterSequence.Insert(start,
|
||||
rt.DOAnchorPos(basePos, Mathf.Max(0.01f, enterItemDuration))
|
||||
.SetEase(enterEase)
|
||||
.SetUpdate(true));
|
||||
if (restoreTransform)
|
||||
{
|
||||
enterSequence.Insert(start,
|
||||
rt.DOAnchorPos(basePos, Mathf.Max(0.01f, enterItemDuration))
|
||||
.SetEase(enterEase)
|
||||
.SetUpdate(true));
|
||||
}
|
||||
enterSequence.Insert(start,
|
||||
cg.DOFade(1f, Mathf.Max(0.01f, enterItemDuration))
|
||||
.SetEase(Ease.OutCubic)
|
||||
.SetUpdate(true));
|
||||
}
|
||||
|
||||
enterSequence.OnKill(RestoreEnterAnimationState);
|
||||
enterSequence.OnComplete(RestoreEnterAnimationState);
|
||||
}
|
||||
|
||||
private void CacheEnterItems()
|
||||
@@ -113,6 +124,7 @@ public class ui_Panel_Setting : MonoBehaviour
|
||||
enterItems.Clear();
|
||||
enterGroups.Clear();
|
||||
enterBasePos.Clear();
|
||||
enterRestoreTransform.Clear();
|
||||
|
||||
for (int i = 0; i < transform.childCount; i++)
|
||||
{
|
||||
@@ -131,6 +143,7 @@ public class ui_Panel_Setting : MonoBehaviour
|
||||
enterItems.Add(rt);
|
||||
enterGroups.Add(cg);
|
||||
enterBasePos.Add(rt.anchoredPosition);
|
||||
enterRestoreTransform.Add(!UI_OrderedEntryAnimator.IsLayoutSensitive(rt));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,8 +156,39 @@ public class ui_Panel_Setting : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
private void RestoreEnterAnimationState()
|
||||
{
|
||||
for (int i = 0; i < enterItems.Count; i++)
|
||||
{
|
||||
RectTransform rt = enterItems[i];
|
||||
CanvasGroup cg = i < enterGroups.Count ? enterGroups[i] : null;
|
||||
bool restoreTransform = i < enterRestoreTransform.Count && enterRestoreTransform[i];
|
||||
|
||||
if (rt != null)
|
||||
{
|
||||
rt.DOKill();
|
||||
if (restoreTransform && i < enterBasePos.Count)
|
||||
{
|
||||
rt.anchoredPosition = enterBasePos[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (cg != null)
|
||||
{
|
||||
cg.DOKill();
|
||||
cg.alpha = 1f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Close()
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
UI_PanelExitUtility.PlayExitThen(gameObject, () =>
|
||||
{
|
||||
if (gameObject != null)
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user