Ver.0.3.0.33

This commit is contained in:
2025-07-08 08:32:46 +00:00
parent 99f4dd67c2
commit 0ad5e29917
6831 changed files with 695623 additions and 234455 deletions
@@ -0,0 +1,61 @@
using UnityEngine;
namespace AibisDream.Kit
{
public class RepeatTrack : MonoBehaviour
{
public Sprite sprite;
public float width;
public float moveSpeed;
private SpriteRenderer _renderer1;
private SpriteRenderer _renderer2;
private void Start()
{
_renderer1 = GeneNewRenderer();
_renderer1.transform.localPosition = Vector3.zero;
}
private SpriteRenderer GeneNewRenderer()
{
var newRenderer = new GameObject().AddComponent<SpriteRenderer>();
newRenderer.sprite = sprite;
newRenderer.transform.SetParent(transform);
newRenderer.sortingOrder = 5;
newRenderer.sortingLayerName = "FixMiddle";
newRenderer.maskInteraction = SpriteMaskInteraction.VisibleInsideMask;
return newRenderer;
}
public void Update()
{
// Debug.Log("render" + _renderer1);
// Debug.Log("bounds" + _renderer1.bounds);
// Debug.Log("size" + _renderer1.bounds.size);
var spriteWidth = _renderer1.bounds.size.x;
if (-_renderer1.transform.localPosition.x + width > spriteWidth && !_renderer2)
{
// 可以新建下一个了
_renderer2 = GeneNewRenderer();
_renderer2.transform.localPosition = new Vector3(width, 0, 0);
}
if (-_renderer1.transform.localPosition.x > spriteWidth)
{
Destroy(_renderer1.gameObject);
_renderer1 = _renderer2;
_renderer2 = null;
}
_renderer1.transform.localPosition =
new Vector3(_renderer1.transform.localPosition.x + moveSpeed * Time.deltaTime, 0, 0);
if (_renderer2)
{
_renderer2.transform.localPosition =
new Vector3(_renderer2.transform.localPosition.x + moveSpeed * Time.deltaTime, 0, 0);
}
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1f3b807c39d1418293491f15d9f6326b
timeCreated: 1747141530
@@ -0,0 +1,88 @@
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;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 885cefce8d27b9c44b433278584f254d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,74 @@
using UnityEngine;
namespace AibisDream.Kit
{
public class SpriteLooper : MonoBehaviour
{
private SpriteRenderer _fadeOutRenderer;
private SpriteRenderer _fadeInRenderer;
public Sprite[] sprites;
[Range(0, 1)]public float fadeRadio;
public float CurProgress { get; private set; }
private void Awake()
{
InitRefs();
}
private void InitRefs()
{
_fadeOutRenderer = transform.Find("Sprite1").GetComponent<SpriteRenderer>();
_fadeInRenderer = transform.Find("Sprite2").GetComponent<SpriteRenderer>();
}
public void Init()
{
CurProgress = 0;
// 激活初始状态
_fadeOutRenderer.sprite = sprites[0];
_fadeOutRenderer.color = Color.white;
_fadeInRenderer.sprite = sprites[1];
_fadeInRenderer.color = Color.clear;
}
public void SetLoopProgress(float progress)
{
CurProgress = progress;
// 将进度条转为图片序号和淡出进度
var calculator = new LoopDataCalculator(progress, sprites.Length, fadeRadio);
_fadeOutRenderer.sprite = sprites[calculator.CurIdx];
_fadeOutRenderer.color = calculator.FadeOutColor;
_fadeInRenderer.sprite = sprites[calculator.NextIdx];
_fadeInRenderer.color = calculator.FadeInColor;
}
}
public readonly struct LoopDataCalculator
{
private readonly float _progress;
private readonly float _localProgress;
private readonly float _fadeRadio;
public int CurIdx { get; }
public int NextIdx { get; }
public LoopDataCalculator(float progress, int spriteCount, float fadeRadio)
{
_progress = progress;
_localProgress = 1 / (float)spriteCount;
_fadeRadio = fadeRadio;
CurIdx = Mathf.FloorToInt(progress / _localProgress);
NextIdx = CurIdx + 1 >= spriteCount ? 0 : CurIdx + 1;
}
private float LeftProgress =>
Mathf.Clamp01((_progress - (CurIdx + 1 - _fadeRadio) * _localProgress) / (_localProgress * _fadeRadio));
public Color FadeOutColor => new(1f, 1f, 1f, 1 - LeftProgress);
public Color FadeInColor => new(1f, 1f, 1f, LeftProgress);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 46b06a7e067e04142a7715ae3571abde
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: