using System; using UnityEngine; using DG.Tweening; public class ScrollOpenUI : MonoBehaviour { public RectTransform leftPole; public RectTransform rightPole; public RectTransform mask; public float openWidth = 800f; public float maskWidth = 844f; public float duration = 0.8f; Tween tween; private void Start() { mask.sizeDelta = new Vector2(0, mask.sizeDelta.y); } // ================= 对外接口 ================= public void Open(Action cb) { Play(1f,cb); } public void Close(Action cb) { Play(0f,cb); } // ============================================ void Play(float target,Action cb) { tween?.Kill(); float leftX = target == 1f ? -openWidth * 0.5f : 0f; float rightX = target == 1f ? openWidth * 0.5f : 0f; float maskX = target == 1f ? maskWidth : 0f; tween = DOTween.Sequence() .Join(leftPole.DOAnchorPosX(leftX, duration)) .Join(rightPole.DOAnchorPosX(rightX, duration)) .Join(mask.DOSizeDelta( new Vector2(maskX, mask.sizeDelta.y), duration )) .SetEase(Ease.OutCubic).OnComplete(() => { cb?.Invoke(); }); } // ================= 初始化 ================= void OnDisable() { tween?.Kill(); } }