980 lines
46 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using PrimeTween;
using UnityEngine;
using UnityEngine.UI;
namespace TEngine
{
public class TweenManager
{
private static TweenManager _instance = null;
public static TweenManager Instance
{
get
{
if (_instance == null)
{
_instance = new TweenManager();
}
return _instance;
}
}
public TweenManager()
{
Utility.Unity.AddUpdateListener(Update);
}
private const float CheckInterval = 60f;
private float m_CheckInterval = CheckInterval;
private void Update()
{
m_CheckInterval -= Time.deltaTime;
// 如果时间间隔小于等于0
if (m_CheckInterval <= 0)
{
// 释放未使用的Tween
PrimeTweenHelperImp.ReleaseUnusedTween();
// 重置时间间隔
m_CheckInterval = CheckInterval;
}
}
}
/// <summary>
/// Tween实现类。
/// <remarks>需要PrimeTween新增 public long Id => id;
/// </remarks>
/// </summary>
public class PrimeTweenHelperImp : Utility.Tween.ITweenHelper
{
// 缓存Tween的字典键为Tween的ID值为Tween对象
private static readonly Dictionary<long, Tween> m_cacheTweenDic = new Dictionary<long, Tween>();
// 临时列表用于存储需要释放的Tween的ID
private static readonly List<long> m_tempList = new List<long>();
// 缓存Sequence的字典键为Sequence的ID值为Sequence对象
private static readonly Dictionary<long, Sequence> m_cacheSequenceDic = new Dictionary<long, Sequence>();
// 临时列表用于存储需要释放的Sequence的ID
private static readonly List<long> m_tempSequenceList = new List<long>();
// Tween的最大容量
private const int TweenCapacity = 128;
/// <summary>
/// 构造函数初始化Tween配置。
/// </summary>
public PrimeTweenHelperImp()
{
PrimeTweenConfig.SetTweensCapacity(TweenCapacity);
PrimeTweenConfig.warnEndValueEqualsCurrent = false;
var t = TweenManager.Instance;
Debug.Log($"Init PrimeTweenConfig.");
}
/// <summary>
/// 将TEngine的Ease枚举转换为PrimeTween的Ease枚举。
/// </summary>
/// <param name="ease">TEngine的Ease枚举值。</param>
/// <returns>对应的PrimeTween的Ease枚举值。</returns>
private PrimeTween.Ease GetEase(TEngine.Ease ease)
{
return (PrimeTween.Ease)(int)ease;
}
/// <summary>
/// 将TEngine的CycleMode枚举转换为PrimeTween的CycleMode枚举。
/// </summary>
/// <param name="cycleMode">TEngine的CycleMode枚举值。</param>
/// <returns>对应的PrimeTween的CycleType枚举值。</returns>
private PrimeTween.CycleMode GetCycleMode(TEngine.CycleMode cycleMode)
{
return (PrimeTween.CycleMode)(int)cycleMode;
}
/// <summary>
/// 缓存Tween对象。
/// </summary>
/// <param name="tween">需要缓存的Tween对象。</param>
private void CacheTween(Tween tween)
{
if (tween.Id <= 0)
{
return;
}
m_cacheTweenDic.TryAdd(tween.Id, tween);
}
/// <summary>
/// 根据Tween的ID获取Tween对象。
/// </summary>
/// <param name="tweenId">Tween的ID。</param>
/// <returns>对应的Tween对象如果不存在则返回null。</returns>
public static Tween GetTween(long tweenId)
{
return m_cacheTweenDic.GetValueOrDefault(tweenId);
}
/// <summary>
/// 根据Sequence的ID获取Sequence对象。
/// </summary>
/// <param name="Id">Sequence的ID。</param>
/// <returns>对应的Sequence对象如果不存在则返回null。</returns>
public static Sequence GetSequence(long Id)
{
return m_cacheSequenceDic.GetValueOrDefault(Id);
}
/// <summary>
/// 判断指定对象是否正在执行Tween动画。
/// </summary>
/// <param name="onTarget">需要检查的对象。</param>
/// <returns>如果正在执行Tween动画则返回true否则返回false。</returns>
public bool IsTweening(object onTarget)
{
return GetTweenCount(onTarget) > 0;
}
/// <summary>
/// 获取指定对象正在执行的Tween动画数量。
/// </summary>
/// <param name="onTarget">需要检查的对象。</param>
/// <returns>正在执行的Tween动画数量。</returns>
public int GetTweenCount(object onTarget)
{
return Tween.GetTweensCount(onTarget);
}
/// <summary>
/// 判断指定ID的Tween是否还存活。
/// </summary>
/// <param name="tweenId">Tween的ID。</param>
/// <returns>如果Tween还存活则返回true否则返回false。</returns>
public bool IsAlive(long tweenId)
{
if (m_cacheTweenDic.TryGetValue(tweenId, out var tween))
{
return tween.isAlive;
}
return false;
}
/// <summary>
/// 释放未使用的Tween对象。
/// </summary>
public static void ReleaseUnusedTween()
{
m_tempList.Clear();
using var iter = m_cacheTweenDic.GetEnumerator();
while (iter.MoveNext())
{
var tween = iter.Current.Value;
var tempId = iter.Current.Key;
// 如果Tween自己的Id为0且缓存的Id不等于0
if (tween.Id == 0 && tempId != 0)
{
m_tempList.Add(tempId);
}
else
{
if (!tween.isAlive)
{
m_tempList.Add(tween.Id);
}
}
}
var removeCnt = m_tempList.Count;
for (int i = 0; i < removeCnt; i++)
{
m_cacheTweenDic.Remove(m_tempList[i]);
}
m_tempList.Clear();
}
public void StopTween(long tweenId)
{
if (m_cacheTweenDic.TryGetValue(tweenId, out var tween))
{
tween.Stop();
}
}
public void CompleteTween(long tweenId)
{
if (m_cacheTweenDic.TryGetValue(tweenId, out var tween))
{
tween.Complete();
}
}
public void Stop(long tweenId)
{
if (m_cacheTweenDic.TryGetValue(tweenId, out var tween))
{
tween.Stop();
}
}
public void Complete(long tweenId)
{
if (m_cacheTweenDic.TryGetValue(tweenId, out var tween))
{
tween.Complete();
}
}
public int StopAll(object onTarget = null)
{
return Tween.StopAll(onTarget);
}
public int CompleteAll(object onTarget = null)
{
return Tween.CompleteAll(onTarget);
}
public void OnComplete(long tweenId, Action onComplete)
{
if (m_cacheTweenDic.TryGetValue(tweenId, out var tween))
{
if (tween.isAlive)
{
tween.OnComplete(onComplete: onComplete);
}
}
}
public long Delay(float duration, Action onComplete = null, bool useUnscaledTime = false, bool warnIfTargetDestroyed = true)
{
Tween tween = Tween.Delay(duration, onComplete, useUnscaledTime, warnIfTargetDestroyed);
CacheTween(tween);
return tween.Id;
}
public long Delay(object target, float duration, Action onComplete = null, bool useUnscaledTime = false, bool warnIfTargetDestroyed = true)
{
Tween tween = Tween.Delay(target, duration, onComplete, useUnscaledTime, warnIfTargetDestroyed);
CacheTween(tween);
return tween.Id;
}
public long LocalRotation(Transform target, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.LocalRotation(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalRotation(Transform target, Vector3 startValue, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.LocalRotation(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Scale(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Scale(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Scale(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Scale(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Rotation(Transform target, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Rotation(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Rotation(Transform target, Vector3 startValue, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Rotation(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Position(Transform target, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Position(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Position(Transform target, Vector3 startValue, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Position(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long PositionX(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.PositionX(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long PositionX(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.PositionX(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long PositionY(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.PositionY(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long PositionY(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.PositionY(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long PositionZ(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.PositionZ(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long PositionZ(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.PositionZ(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPosition(Transform target, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPosition(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPosition(Transform target, Vector3 startValue, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPosition(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPositionX(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPositionX(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPositionX(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPositionX(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPositionY(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPositionY(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPositionY(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPositionY(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPositionZ(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPositionZ(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalPositionZ(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.LocalPositionZ(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Rotation(Transform target, Quaternion endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Rotation(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Rotation(Transform target, Quaternion startValue, Quaternion endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Rotation(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalRotation(Transform target, Quaternion endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.LocalRotation(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long LocalRotation(Transform target, Quaternion startValue, Quaternion endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.LocalRotation(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Scale(Transform target, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Scale(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Scale(Transform target, Vector3 startValue, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Scale(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long ScaleX(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.ScaleX(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long ScaleX(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.ScaleX(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long ScaleY(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.ScaleY(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long ScaleY(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.ScaleY(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long ScaleZ(Transform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.ScaleZ(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long ScaleZ(Transform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.ScaleZ(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Color(SpriteRenderer target, Color endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Color(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Color(SpriteRenderer target, Color startValue, Color endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Color(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Alpha(SpriteRenderer target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Alpha(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Alpha(SpriteRenderer target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Alpha(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UISliderValue(Slider target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.UISliderValue(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UISliderValue(Slider target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UISliderValue(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UINormalizedPosition(ScrollRect target, Vector2 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UINormalizedPosition(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UINormalizedPosition(ScrollRect target, Vector2 startValue, Vector2 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UINormalizedPosition(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIHorizontalNormalizedPosition(ScrollRect target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIHorizontalNormalizedPosition(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIHorizontalNormalizedPosition(ScrollRect target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIHorizontalNormalizedPosition(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay,
useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPosition(RectTransform target, Vector2 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPosition(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPosition(RectTransform target, Vector2 startValue, Vector2 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPosition(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPositionX(RectTransform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPositionX(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPositionX(RectTransform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPositionX(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPositionY(RectTransform target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPositionY(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPositionY(RectTransform target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPositionY(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIVerticalNormalizedPosition(ScrollRect target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIVerticalNormalizedPosition(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIVerticalNormalizedPosition(ScrollRect target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIVerticalNormalizedPosition(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay,
useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPosition3D(RectTransform target, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPosition3D(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIAnchoredPosition3D(RectTransform target, Vector3 startValue, Vector3 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIAnchoredPosition3D(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UISizeDelta(RectTransform target, Vector2 endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UISizeDelta(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UISizeDelta(RectTransform target, Vector2 startValue, Vector2 endValue, float duration, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UISizeDelta(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Color(Graphic target, Color endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Color(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Color(Graphic target, Color startValue, Color endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Color(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Alpha(CanvasGroup target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Alpha(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Alpha(CanvasGroup target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Alpha(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Alpha(Graphic target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0,
float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.Alpha(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Alpha(Graphic target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.Alpha(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIFillAmount(Image target, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
Tween tween = Tween.UIFillAmount(target, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long UIFillAmount(Image target, float startValue, float endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0,
float endDelay = 0, bool useUnscaledTime = false)
{
Tween tween = Tween.UIFillAmount(target, startValue, endValue, duration, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay, useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long MoveBezierPath(Transform target, Vector3[] path, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0,
bool useUnscaledTime = false)
{
if (target == null)
{
throw new ArgumentNullException(nameof(target));
}
if (path.Length < 2)
{
throw new ArgumentException("Path must have at least 2 points.");
}
Tween tween = Tween.Custom<Transform>(target, 0f, 1f, duration, (transform, t) =>
{
// 计算贝塞尔曲线上的点
Vector3 position = CalculateBezierPoint(t, path);
transform.position = position;
if (Mathf.Approximately(t, 1f))
{
transform.position = path[^1];
}
}, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay,
useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
#region BezierPathHelper
/// <summary>
/// N 阶贝塞尔曲线的计算。
/// </summary>
/// <param name="t"></param>
/// <param name="points"></param>
/// <returns></returns>
private static Vector3 CalculateBezierPoint(float t, Vector3[] points)
{
int n = points.Length - 1;
Vector3 point = Vector3.zero;
// 计算贝塞尔点
for (int i = 0; i <= n; i++)
{
float coefficient = BinomialCoefficient(n, i) * Mathf.Pow(1 - t, n - i) * Mathf.Pow(t, i);
point += coefficient * points[i];
}
return point;
}
/// <summary>
/// 计算二项式系数。
/// </summary>
/// <param name="n"></param>
/// <param name="k"></param>
/// <returns></returns>
private static int BinomialCoefficient(int n, int k)
{
if (k < 0 || k > n)
{
return 0;
}
if (k == 0 || k == n)
{
return 1;
}
int result = 1;
for (int i = 0; i < k; i++)
{
result *= (n - i);
result /= (i + 1);
}
return result;
}
#endregion
public long Custom<T>(T target, Vector3 startValue, Vector3 endValue, float duration, Action<T, Vector3> onValueChange, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) where T : class
{
Tween tween = Tween.Custom<T>(target, startValue, endValue, duration, onValueChange, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay,
useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Custom<T>(T target, uint startValue, uint endValue, float duration, Action<T, uint> onValueChange, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) where T : class
{
throw new NotImplementedException();
}
public long Custom<T>(T target, int startValue, int endValue, float duration, Action<T, int> onValueChange, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) where T : class
{
Tween tween = Tween.Custom<T>(target, startValue, endValue, duration, (arg1, f) => { onValueChange?.Invoke(arg1, (int)f); }, GetEase(ease), cycles,
GetCycleMode(cycleMode), startDelay, endDelay,
useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Custom<T>(T target, long startValue, long endValue, float duration, Action<T, long> onValueChange, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) where T : class
{
Tween tween = Tween.Custom<T>(target, startValue, endValue, duration, (arg1, f) => { onValueChange?.Invoke(arg1, (long)f); }, GetEase(ease), cycles,
GetCycleMode(cycleMode), startDelay, endDelay,
useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
public long Custom<T>(T target, float startValue, float endValue, float duration, Action<T, float> onValueChange, Ease ease = Ease.Default, int cycles = 1,
CycleMode cycleMode = CycleMode.Restart,
float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) where T : class
{
Tween tween = Tween.Custom<T>(target, startValue, endValue, duration, onValueChange, GetEase(ease), cycles, GetCycleMode(cycleMode), startDelay, endDelay,
useUnscaledTime);
CacheTween(tween);
return tween.Id;
}
}
}