using System; using AibisDream.Kit; using AibisDream.Utility; using DG.Tweening; using UnityEngine; namespace AibisDream.Kit { public class SpriteDeepIn : MonoBehaviour { private const int TopLayer = 20; private const int BottomLayer = 19; private const string LayerName = "FixMiddle"; public Sprite[] spriteArr; public float duration; public event Action OnFinished; private SpriteRenderer _renderer1; private SpriteRenderer _renderer2; private float _curProgress; private int _curIndex; private void Update() { if (Input.GetKeyDown(KeyCode.K)) { Play(); } } public void Play() { _renderer2 = transform.Find("Renderer1").GetComponent(); PlayNext(); } private void PlayNext() { _curIndex++; // 所有图片播放完毕则退出 if (_curIndex >= spriteArr.Length) { OnFinished?.Invoke(); return; } // 播放下一个图片 InitNewSprite(_curIndex); // 缩放 _curProgress = 0.01f; DOTween.To(() => _curProgress, value => _curProgress = value, 1, duration) .SetEase(Ease.InQuad) .OnUpdate(UpdateSprite) .OnComplete(PlayNext); } private void InitNewSprite(int index) { if (_renderer1) { Destroy(_renderer1.gameObject); } _renderer1 = _renderer2; _renderer2 = new GameObject().AddComponent(); _renderer2.transform.SetParent(transform); // 处理层级 _renderer1.sortingLayerName = LayerName; _renderer1.sortingOrder = BottomLayer; _renderer2.sortingLayerName = LayerName; _renderer2.sortingOrder = TopLayer; _renderer2.transform.localScale = Vector3.one * 0.01f; // 添加图片 _renderer2.sprite = spriteArr[index]; } private void UpdateSprite() { // 大图片缩放 _renderer1.transform.localScale = Vector3.one * (_curProgress * 100); // 小图片缩放 _renderer2.transform.localScale = Vector3.one * _curProgress; } } }