Files
aibis-dream/Assets/Scripts/Framework/PlayKit/SpriteDeepIn.cs
T
2025-05-14 13:03:08 +08:00

88 lines
2.5 KiB
C#

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<SpriteRenderer>();
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<SpriteRenderer>();
_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;
}
}
}