using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using System; using System.Collections; using System.Collections.Generic; public enum Curve { Linear, EaseOutQuad, } public enum EventType { ForwardStart, BackwardStart, ForwardFinish, BackwardFinish, } public delegate float TimerFunction(float value, float duration, float start, float delta); public delegate float ShakeFunctionF(float timer, float duration, int repeat, float start, float strength); public delegate Color ShakeFunctionC(float timer, float duration, int repeat, Color start, Color strength); public delegate Vector3 ShakeFunctionV(float timer, float duration, int repeat, Vector3 start, Vector3 strength); public delegate float CurveFunctionF(float timer, float duration, float start, float delta); public delegate Color CurveFunctionC(float timer, float duration, Color start, Color delta); public delegate Vector3 CurveFunctionV(float timer, float duration, Vector3 start, Vector3 delta); public class ManaAnim : Regist { #region 变量 public static List MoveList = new List(); public static List TweenForList = new List(); public static List TweenBacList = new List(); public static Dictionary TimerFunctionDic = new Dictionary(); public static Dictionary ShakeFuncDicF = new Dictionary(); public static Dictionary ShakeFuncDicC = new Dictionary(); public static Dictionary ShakeFuncDicV = new Dictionary(); public static Dictionary CurveFuncDicF = new Dictionary(); public static Dictionary CurveFuncDicC = new Dictionary(); public static Dictionary CurveFuncDicV = new Dictionary(); public static Dictionary ShakeDic = new Dictionary(); public static Dictionary MoveDic2D = new Dictionary(); public static Dictionary MoveDic3D = new Dictionary(); public static Dictionary ZoomDic2D = new Dictionary(); public static Dictionary TweenSrDic = new Dictionary(); public static Dictionary TweenCgDic = new Dictionary(); public static Dictionary TweenGraDic = new Dictionary(); public static Dictionary TweenVecDic = new Dictionary(); public static Dictionary TweenFontDic = new Dictionary(); public static Dictionary TweenRectDic = new Dictionary(); public static Dictionary TweenScaleDic = new Dictionary(); public static Dictionary TweenAudioDic = new Dictionary(); public static Dictionary TweenNumberDic = new Dictionary(); #endregion public void FixedUpdate() { for (int i = 0; i < MoveList.Count; i++) { Move move = MoveList[i]; if (move.Do()) { if (MoveList.Remove(move)) { i--; } } } for (int i = 0; i < TweenForList.Count; i++) { Tween tween = TweenForList[i]; if (tween.DoForward()) { if (TweenForList.Remove(tween)) { i--; } } } for (int i = 0; i < TweenBacList.Count; i++) { Tween tween = TweenBacList[i]; if (tween.DoBackward()) { if (TweenBacList.Remove(tween)) { i--; } } } } public override void RegistImmed() { TimerFunctionDic.Add(Curve.Linear, LinearTimer); TimerFunctionDic.Add(Curve.EaseOutQuad, EaseOutQuadTimer); ShakeFuncDicF.Add(Curve.Linear, ShakeLinear); ShakeFuncDicF.Add(Curve.EaseOutQuad, ShakeEaseOutQuad); ShakeFuncDicC.Add(Curve.Linear, ShakeLinear); ShakeFuncDicC.Add(Curve.EaseOutQuad, ShakeEaseOutQuad); ShakeFuncDicV.Add(Curve.Linear, ShakeLinear); ShakeFuncDicV.Add(Curve.EaseOutQuad, ShakeEaseOutQuad); CurveFuncDicF.Add(Curve.Linear, Linear); CurveFuncDicF.Add(Curve.EaseOutQuad, EaseOutQuad); CurveFuncDicC.Add(Curve.Linear, Linear); CurveFuncDicC.Add(Curve.EaseOutQuad, EaseOutQuad); CurveFuncDicV.Add(Curve.Linear, Linear); CurveFuncDicV.Add(Curve.EaseOutQuad, EaseOutQuad); } #region 曲线 public static float LinearTimer(float value, float duration, float start, float delta) { return (value - start)*duration/delta; } public static float EaseOutQuadTimer(float value, float duration, float start, float delta) { return ((2 - Mathf.Sqrt(4 - 4*(value - start)/delta))/2)*duration; } public static float ShakeLinear(float timer, float duration, int repeat, float start, float strength) { float sliceTime = duration/(4*repeat); for (int i = 0; i < repeat*4; i += 4) { if (timer > duration) { return start; } if (timer <= (i + 1)*sliceTime) { timer -= (i)*sliceTime; return Linear(timer, sliceTime, start, strength/(i/4 + 1)); } else if (timer <= (i + 3)*sliceTime) { timer -= (i + 1)*sliceTime; return Linear(timer, 2*sliceTime, start + strength/(i/4 + 1), -2*strength/(i/4 + 1)); } else if (timer <= (i + 4)*sliceTime) { timer -= (i + 3)*sliceTime; return Linear(timer, sliceTime, start - strength/(i/4 + 1), strength/(i/4 + 1)); } } throw new Exception(); } public static Color ShakeLinear(float timer, float duration, int repeat, Color start, Color strength) { float sliceTime = duration/(4*repeat); for (int i = 0; i < repeat*4; i += 4) { if (timer > duration) { return start; } if (timer <= (i + 1)*sliceTime) { timer -= (i)*sliceTime; return Linear(timer, sliceTime, start, strength/(i/4 + 1)); } else if (timer <= (i + 3)*sliceTime) { timer -= (i + 1)*sliceTime; return Linear(timer, 2*sliceTime, start + strength/(i/4 + 1), -2*strength/(i/4 + 1)); } else if (timer <= (i + 4)*sliceTime) { timer -= (i + 3)*sliceTime; return Linear(timer, sliceTime, start - strength/(i/4 + 1), strength/(i/4 + 1)); } } throw new Exception(); } public static Vector3 ShakeLinear(float timer, float duration, int repeat, Vector3 start, Vector3 strength) { float sliceTime = duration/(4*repeat); for (int i = 0; i < repeat*4; i += 4) { if (timer > duration) { return start; } if (timer <= (i + 1)*sliceTime) { timer -= (i)*sliceTime; return Linear(timer, sliceTime, start, strength/(i/4 + 1)); } else if (timer <= (i + 3)*sliceTime) { timer -= (i + 1)*sliceTime; return Linear(timer, 2*sliceTime, start + strength/(i/4 + 1), -2*strength/(i/4 + 1)); } else if (timer <= (i + 4)*sliceTime) { timer -= (i + 3)*sliceTime; return Linear(timer, sliceTime, start - strength/(i/4 + 1), strength/(i/4 + 1)); } } throw new Exception(); } public static float ShakeEaseOutQuad(float timer, float duration, int repeat, float start, float strength) { float sliceTime = duration/(4*repeat); for (int i = 0; i < repeat*4; i += 4) { if (timer > duration) { return start; } if (timer <= (i + 1)*sliceTime) { timer -= (i)*sliceTime; return EaseOutQuad(timer, sliceTime, start, strength/(i/4 + 1)); } else if (timer <= (i + 3)*sliceTime) { timer -= (i + 1)*sliceTime; return EaseOutQuad(timer, 2*sliceTime, start + strength/(i/4 + 1), -2*strength/(i/4 + 1)); } else if (timer <= (i + 4)*sliceTime) { timer -= (i + 3)*sliceTime; return EaseOutQuad(timer, sliceTime, start - strength/(i/4 + 1), strength/(i/4 + 1)); } } throw new Exception(); } public static Color ShakeEaseOutQuad(float timer, float duration, int repeat, Color start, Color strength) { float sliceTime = duration/(4*repeat); for (int i = 0; i < repeat*4; i += 4) { if (timer > duration) { return start; } if (timer <= (i + 1)*sliceTime) { timer -= (i)*sliceTime; return EaseOutQuad(timer, sliceTime, start, strength/(i/4 + 1)); } else if (timer <= (i + 3)*sliceTime) { timer -= (i + 1)*sliceTime; return EaseOutQuad(timer, 2*sliceTime, start + strength/(i/4 + 1), -2*strength/(i/4 + 1)); } else if (timer <= (i + 4)*sliceTime) { timer -= (i + 3)*sliceTime; return EaseOutQuad(timer, sliceTime, start - strength/(i/4 + 1), strength/(i/4 + 1)); } } throw new Exception(); } public static Vector3 ShakeEaseOutQuad(float timer, float duration, int repeat, Vector3 start, Vector3 strength) { float sliceTime = duration/(4*repeat); for (int i = 0; i < repeat*4; i += 4) { if (timer > duration) { return start; } if (timer <= (i + 1)*sliceTime) { timer -= (i)*sliceTime; return EaseOutQuad(timer, sliceTime, start, strength/(i/4 + 1)); } else if (timer <= (i + 3)*sliceTime) { timer -= (i + 1)*sliceTime; return EaseOutQuad(timer, 2*sliceTime, start + strength/(i/4 + 1), -2*strength/(i/4 + 1)); } else if (timer <= (i + 4)*sliceTime) { timer -= (i + 3)*sliceTime; return EaseOutQuad(timer, sliceTime, start - strength/(i/4 + 1), strength/(i/4 + 1)); } } throw new Exception(); } public static float Linear(float timer, float duration, float start, float delta) { if (Math.Abs(duration) < 0.0005f) { return delta + start; } else { return delta*timer/duration + start; } } public static Color Linear(float timer, float duration, Color start, Color delta) { return new Color(Linear(timer, duration, start.r, delta.r), Linear(timer, duration, start.g, delta.g), Linear(timer, duration, start.b, delta.b), Linear(timer, duration, start.a, delta.a)); } public static Vector3 Linear(float timer, float duration, Vector3 start, Vector3 delta) { return new Vector3(Linear(timer, duration, start.x, delta.x), Linear(timer, duration, start.y, delta.y), Linear(timer, duration, start.z, delta.z)); } public static float EaseOutQuad(float timer, float duration, float start, float delta) { if (Math.Abs(duration) < 0.0005f) { return delta + start; } else { timer /= duration; return -delta*timer*(timer - 2) + start; } } public static Color EaseOutQuad(float timer, float duration, Color start, Color delta) { return new Color(EaseOutQuad(timer, duration, start.r, delta.r), EaseOutQuad(timer, duration, start.g, delta.g), EaseOutQuad(timer, duration, start.b, delta.b), EaseOutQuad(timer, duration, start.a, delta.a)); } public static Vector3 EaseOutQuad(float timer, float duration, Vector3 start, Vector3 delta) { return new Vector3(EaseOutQuad(timer, duration, start.x, delta.x), EaseOutQuad(timer, duration, start.y, delta.y), EaseOutQuad(timer, duration, start.z, delta.z)); } #endregion #region 播放动画 public static Shake Shake(Transform target, float duration, int repeat, Vector3 strength, Curve curve) { Shake move; if (ShakeDic.TryGetValue(target, out move)) { move.StartShake(repeat, duration, strength, curve); } else { move = CreateShake(target); move.StartShake(repeat, duration, strength, curve); } return move; } public static Move2D Move2D(Transform target, Vector3 destination, float duration, bool local, Curve curve) { Move2D move; if (local) { destination.z = target.localPosition.z; } else { destination.z = target.position.z; } if (MoveDic2D.TryGetValue(target, out move)) { move.StartMove(destination, duration, local, curve); return move; } else { move = CreateMove2D(target); move.StartMove(destination, duration, local, curve); return move; } } public static Move3D Move3D(Transform target, Vector3 destination, float duration, bool local, Curve curve) { Move3D move; if (MoveDic3D.TryGetValue(target, out move)) { move.StartMove(destination, duration, local, curve); return move; } else { move = CreateMove3D(target); move.StartMove(destination, duration, local, curve); return move; } } public static Move2D MoveOffset2D(Transform target, Vector3 offset, float duration, bool local, Curve curve) { Move2D move; Vector3 destination; if (local) { destination = target.localPosition + offset; destination.z = target.localPosition.z; } else { destination = target.position + offset; destination.z = target.position.z; } if (MoveDic2D.TryGetValue(target, out move)) { move.StartMove(destination, duration, local, curve); return move; } else { move = CreateMove2D(target); move.StartMove(destination, duration, local, curve); return move; } } public static Move3D MoveOffset3D(Transform target, Vector3 offset, float duration, bool local, Curve curve) { Move3D move; Vector3 destination; if (local) { destination = target.localPosition + offset; } else { destination = target.position + offset; } if (MoveDic3D.TryGetValue(target, out move)) { move.StartMove(destination, duration, local, curve); return move; } else { move = CreateMove3D(target); move.StartMove(destination, duration, local, curve); return move; } } public static Zoom2D Zoom2D(Transform target, float origin, float destination, float duration, float stay, Transform targetZoom, Curve curve) { Zoom2D move; if (ZoomDic2D.TryGetValue(target, out move)) { move.StartZoom(origin, destination, duration, stay, targetZoom, curve); } else { move = CreateZoom2D(target); move.StartZoom(origin, destination, duration, stay, targetZoom, curve); } return move; } public static Zoom2D Zoom2D(Transform target, float destination, float duration, float stay, Transform targetZoom, Curve curve) { Zoom2D move; Camera camera = target.GetComponent(); if (ZoomDic2D.TryGetValue(target, out move)) { move.StartZoom(camera.orthographicSize, destination, duration, stay, targetZoom, curve); } else { move = CreateZoom2D(target); move.StartZoom(camera.orthographicSize, destination, duration, stay, targetZoom, curve); } return move; } public static TweenSr TweenForSr(Transform target) { TweenSr tween; if (TweenSrDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenCG TweenForCG(Transform target) { TweenCG tween; if (TweenCgDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenGra TweenForGra(Transform target) { TweenGra tween; if (TweenGraDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenVec TweenForVec(Transform target) { TweenVec tween; if (TweenVecDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenFont TweenForFont(Transform target) { TweenFont tween; if (TweenFontDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenRect TweenForRect(Transform target) { TweenRect tween; if (TweenRectDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenScale TweenForScale(Transform target) { TweenScale tween; if (TweenScaleDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenAudio TweenForAudio(Transform target) { TweenAudio tween; if (TweenAudioDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenNumber TweenForNumber(Transform target) { TweenNumber tween; if (TweenNumberDic.TryGetValue(target, out tween)) { tween.StartForward(); } else { throw new Exception(); } return tween; } public static TweenSr TweenBacSr(Transform target) { TweenSr tween; if (TweenSrDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(); } return tween; } public static TweenCG TweenBacCG(Transform target) { TweenCG tween; if (TweenCgDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(); } return tween; } public static TweenGra TweenBacGra(Transform target) { TweenGra tween; if (TweenGraDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(target.name); } return tween; } public static TweenVec TweenBacVec(Transform target) { TweenVec tween; if (TweenVecDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(target.name); } return tween; } public static TweenFont TweenBacFont(Transform target) { TweenFont tween; if (TweenFontDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(); } return tween; } public static TweenRect TweenBacRect(Transform target) { TweenRect tween; if (TweenRectDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(); } return tween; } public static TweenScale TweenBacScale(Transform target) { TweenScale tween; if (TweenScaleDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(); } return tween; } public static TweenAudio TweenBacAudio(Transform target) { TweenAudio tween; if (TweenAudioDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(); } return tween; } public static TweenNumber TweenBacNumber(Transform target) { TweenNumber tween; if (TweenNumberDic.TryGetValue(target, out tween)) { tween.StartBackward(); } else { throw new Exception(); } return tween; } public static TweenSr TweenConForSr(Transform target) { TweenSr tween; if (TweenSrDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenCG TweenConForCG(Transform target) { TweenCG tween; if (TweenCgDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenGra TweenConForGra(Transform target) { TweenGra tween; if (TweenGraDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenVec TweenConForVec(Transform target) { TweenVec tween; if (TweenVecDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenFont TweenConForFont(Transform target) { TweenFont tween; if (TweenFontDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenRect TweenConForRect(Transform target) { TweenRect tween; if (TweenRectDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenScale TweenConForScale(Transform target) { TweenScale tween; if (TweenScaleDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenAudio TweenConForAudio(Transform target) { TweenAudio tween; if (TweenAudioDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenNumber TweenConForNumber(Transform target) { TweenNumber tween; if (TweenNumberDic.TryGetValue(target, out tween)) { tween.ConfineForward(); } else { throw new Exception(); } return tween; } public static TweenSr TweenConBacSr(Transform target) { TweenSr tween; if (TweenSrDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(); } return tween; } public static TweenCG TweenConBacCG(Transform target) { TweenCG tween; if (TweenCgDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(); } return tween; } public static TweenGra TweenConBacGra(Transform target) { TweenGra tween; if (TweenGraDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(target.name); } return tween; } public static TweenVec TweenConBacVec(Transform target) { TweenVec tween; if (TweenVecDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(target.name); } return tween; } public static TweenFont TweenConBacFont(Transform target) { TweenFont tween; if (TweenFontDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(); } return tween; } public static TweenRect TweenConBacRect(Transform target) { TweenRect tween; if (TweenRectDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(); } return tween; } public static TweenScale TweenConBacScale(Transform target) { TweenScale tween; if (TweenScaleDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(); } return tween; } public static TweenAudio TweenConBacAudio(Transform target) { TweenAudio tween; if (TweenAudioDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(); } return tween; } public static TweenNumber TweenConBacNumber(Transform target) { TweenNumber tween; if (TweenNumberDic.TryGetValue(target, out tween)) { tween.ConfineBackward(); } else { throw new Exception(); } return tween; } public static TweenSr TweenReForSr(Transform target) { TweenSr tween; if (TweenSrDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenCG TweenReForCG(Transform target) { TweenCG tween; if (TweenCgDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenGra TweenReForGra(Transform target) { TweenGra tween; if (TweenGraDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenVec TweenReForVec(Transform target) { TweenVec tween; if (TweenVecDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenFont TweenReForFont(Transform target) { TweenFont tween; if (TweenFontDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenRect TweenReForRect(Transform target) { TweenRect tween; if (TweenRectDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenScale TweenReForScale(Transform target) { TweenScale tween; if (TweenScaleDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenAudio TweenReForAudio(Transform target) { TweenAudio tween; if (TweenAudioDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenNumber TweenReForNumber(Transform target) { TweenNumber tween; if (TweenNumberDic.TryGetValue(target, out tween)) { tween.ReForward(); } else { throw new Exception(); } return tween; } public static TweenSr TweenReBacSr(Transform target) { TweenSr tween; if (TweenSrDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(); } return tween; } public static TweenCG TweenReBacCG(Transform target) { TweenCG tween; if (TweenCgDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(); } return tween; } public static TweenGra TweenReBacGra(Transform target) { TweenGra tween; if (TweenGraDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(target.name); } return tween; } public static TweenVec TweenReBacVec(Transform target) { TweenVec tween; if (TweenVecDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(target.name); } return tween; } public static TweenFont TweenReBacFont(Transform target) { TweenFont tween; if (TweenFontDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(); } return tween; } public static TweenRect TweenReBacRect(Transform target) { TweenRect tween; if (TweenRectDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(); } return tween; } public static TweenScale TweenReBacScale(Transform target) { TweenScale tween; if (TweenScaleDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(); } return tween; } public static TweenAudio TweenReBacAudio(Transform target) { TweenAudio tween; if (TweenAudioDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(); } return tween; } public static TweenNumber TweenReBacNumber(Transform target) { TweenNumber tween; if (TweenNumberDic.TryGetValue(target, out tween)) { tween.ReBackward(); } else { throw new Exception(); } return tween; } #endregion #region 获取动画 public static float GetTimerVec3(Vector3 value, float duration, Vector3 start, Vector3 delta, Curve curve) { if (!delta.x.Equal(0)) { return TimerFunctionDic[curve](value.x, duration, start.x, delta.x); } else if (!delta.y.Equal(0)) { return TimerFunctionDic[curve](value.y, duration, start.y, delta.y); } else if (!delta.z.Equal(0)) { return TimerFunctionDic[curve](value.z, duration, start.z, delta.z); } else { throw new Exception(); } } public static float GetTimerFloat(float value, float duration, float start, float delta, Curve curve) { return TimerFunctionDic[curve](value, duration, start, delta); } public static float GetTimerColor(Color value, float duration, Color start, Color delta, Curve curve) { if (Math.Abs(delta.r) > 0.0005f) { return TimerFunctionDic[curve](value.r, duration, start.r, delta.r); } else if (Math.Abs(delta.g) > 0.0005f) { return TimerFunctionDic[curve](value.g, duration, start.g, delta.g); } else if (Math.Abs(delta.b) > 0.0005f) { return TimerFunctionDic[curve](value.b, duration, start.b, delta.b); } else if (Math.Abs(delta.a) > 0.0005f) { return TimerFunctionDic[curve](value.a, duration, start.a, delta.a); } else { throw new Exception(); } } public static Shake GetShake(Transform target) { Shake move; if (ShakeDic.TryGetValue(target, out move)) { return move; } else { throw new Exception(); } } public static Move2D GetMove2D(Transform target) { Move2D move; if (MoveDic2D.TryGetValue(target, out move)) { return move; } else { throw new Exception(); } } public static Move3D GetMove3D(Transform target) { Move3D move; if (MoveDic3D.TryGetValue(target, out move)) { return move; } else { throw new Exception(); } } public static Zoom2D GetZoom2D(Transform target) { Zoom2D move; if (ZoomDic2D.TryGetValue(target, out move)) { return move; } else { throw new Exception(); } } public static TweenSr GetTweenSr(Transform target) { TweenSr tween; if (TweenSrDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenCG GetTweenCG(Transform target) { TweenCG tween; if (TweenCgDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenGra GetTweenGra(Transform target) { TweenGra tween; if (TweenGraDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenVec GetTweenVec(Transform target) { TweenVec tween; if (TweenVecDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenFont GetTweenFont(Transform target) { TweenFont tween; if (TweenFontDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenRect GetTweenRect(Transform target) { TweenRect tween; if (TweenRectDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenScale GetTweenScale(Transform target) { TweenScale tween; if (TweenScaleDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenAudio GetTweenAudio(Transform target) { TweenAudio tween; if (TweenAudioDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } public static TweenNumber GetTweenNumber(Transform target) { TweenNumber tween; if (TweenNumberDic.TryGetValue(target, out tween)) { return tween; } else { throw new Exception(); } } #endregion #region 创建动画 public static Shake CreateShake(Transform target) { if (ShakeDic.ContainsKey(target)) { Shake shake = ShakeDic[target]; ShakeDic[target] = new Shake(target); return shake; } else { Shake shake = new Shake(target); ShakeDic.Add(target, shake); return shake; } } public static Move2D CreateMove2D(Transform target) { if (MoveDic2D.ContainsKey(target)) { Move2D move2D = MoveDic2D[target]; MoveDic2D[target] = new Move2D(target); return move2D; } else { Move2D move2D = new Move2D(target); MoveDic2D.Add(target, move2D); return move2D; } } public static Move3D CreateMove3D(Transform target) { if (MoveDic3D.ContainsKey(target)) { Move3D move3D = MoveDic3D[target]; MoveDic3D[target] = new Move3D(target); return move3D; } else { Move3D move3D = new Move3D(target); MoveDic3D.Add(target, move3D); return move3D; } } public static Zoom2D CreateZoom2D(Transform target) { if (ZoomDic2D.ContainsKey(target)) { Zoom2D zoom2D = ZoomDic2D[target]; ZoomDic2D[target] = new Zoom2D(target.GetComponent()); return zoom2D; } else { Zoom2D zoom2D = new Zoom2D(target.GetComponent()); ZoomDic2D.Add(target, zoom2D); return zoom2D; } } public static TweenSr CreateTweenSr(Transform target, float originAlpha, float destinationAlpha, float duration, bool originActive, bool destActive, Curve curve, bool cg = false, bool group = false) { TweenSr tweenSr; SpriteRenderer sr = target.GetComponent(); Color origin = sr.color; Color destination = sr.color; origin.a = originAlpha; destination.a = destinationAlpha; if (TweenSrDic.ContainsKey(target)) { tweenSr = TweenSrDic[target]; TweenSrDic[target] = new TweenSr(sr, origin, destination, duration, originActive, destActive, curve, cg, group); return tweenSr; } else { tweenSr = new TweenSr(sr, origin, destination, duration, originActive, destActive, curve, cg, group); TweenSrDic.Add(target, tweenSr); return tweenSr; } } public static TweenSr CreateTweenSr(Transform target, float destinationAlpha, float duration, bool originActive, bool destActive, Curve curve, bool cg = false, bool group = false) { TweenSr tweenSr; SpriteRenderer sr = target.GetComponent(); Color destination = sr.color; destination.a = destinationAlpha; if (TweenSrDic.ContainsKey(target)) { tweenSr = TweenSrDic[target]; TweenSrDic[target] = new TweenSr(sr, sr.color, destination, duration, originActive, destActive, curve, cg, group); return tweenSr; } else { tweenSr = new TweenSr(sr, sr.color, destination, duration, originActive, destActive, curve, cg, group); TweenSrDic.Add(target, tweenSr); return tweenSr; } } public static TweenSr CreateTweenSr(Transform target, Color origin, Color destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false, bool group = false) { TweenSr tweenSr; SpriteRenderer sr = target.GetComponent(); if (TweenSrDic.ContainsKey(target)) { tweenSr = TweenSrDic[target]; TweenSrDic[target] = new TweenSr(sr, origin, destination, duration, originActive, destActive, curve, cg, group); return tweenSr; } else { tweenSr = new TweenSr(sr, origin, destination, duration, originActive, destActive, curve, cg, group); TweenSrDic.Add(target, tweenSr); return tweenSr; } } public static TweenSr CreateTweenSr(Transform target, Color destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false, bool group = false) { TweenSr tweenSr; SpriteRenderer sr = target.GetComponent(); if (TweenSrDic.ContainsKey(target)) { tweenSr = TweenSrDic[target]; TweenSrDic[target] = new TweenSr(sr, sr.color, destination, duration, originActive, destActive, curve, cg, group); return tweenSr; } else { tweenSr = new TweenSr(sr, sr.color, destination, duration, originActive, destActive, curve, cg, group); TweenSrDic.Add(target, tweenSr); return tweenSr; } } public static TweenCG CreateTweenCG(Transform target, float origin, float destination, float duration, bool originActive, bool destActive, Curve curve) { TweenCG tweenCg; CanvasGroup cg = target.GetComponent(); if (TweenCgDic.ContainsKey(target)) { tweenCg = TweenCgDic[target]; TweenCgDic[target] = new TweenCG(cg, origin, destination, duration, originActive, destActive, curve); return tweenCg; } else { tweenCg = new TweenCG(cg, origin, destination, duration, originActive, destActive, curve); TweenCgDic.Add(target, tweenCg); return tweenCg; } } public static TweenCG CreateTweenCG(Transform target, float destination, float duration, bool originActive, bool destActive, Curve curve) { TweenCG tweenCg; CanvasGroup cg = target.GetComponent(); if (TweenCgDic.ContainsKey(target)) { tweenCg = TweenCgDic[target]; TweenCgDic[target] = new TweenCG(cg, cg.alpha, destination, duration, originActive, destActive, curve); return tweenCg; } else { tweenCg = new TweenCG(cg, cg.alpha, destination, duration, originActive, destActive, curve); TweenCgDic.Add(target, tweenCg); return tweenCg; } } public static TweenGra CreateTweenGra(Transform target, float originAlpha, float destinationAlpha, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Graphic graphic = target.GetComponent(); TweenGra tweenGra; Color origin = graphic.color; Color destination = graphic.color; origin.a = originAlpha; destination.a = destinationAlpha; if (TweenGraDic.ContainsKey(target)) { tweenGra = TweenGraDic[target]; TweenGraDic[target] = new TweenGra(graphic, origin, destination, duration, originActive, destActive, curve, cg); return tweenGra; } else { tweenGra = new TweenGra(graphic, origin, destination, duration, originActive, destActive, curve, cg); TweenGraDic.Add(target, tweenGra); return tweenGra; } } public static TweenGra CreateTweenGra(Transform target, float destinationAlpha, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Graphic graphic = target.GetComponent(); TweenGra tweenGra; Color destination = graphic.color; destination.a = destinationAlpha; if (TweenGraDic.ContainsKey(target)) { tweenGra = TweenGraDic[target]; TweenGraDic[target] = new TweenGra(graphic, graphic.color, destination, duration, originActive, destActive, curve, cg); return tweenGra; } else { tweenGra = new TweenGra(graphic, graphic.color, destination, duration, originActive, destActive, curve, cg); TweenGraDic.Add(target, tweenGra); return tweenGra; } } public static TweenGra CreateTweenGra(Transform target, Color origin, Color destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Graphic graphic = target.GetComponent(); TweenGra tweenGra; if (TweenGraDic.ContainsKey(target)) { tweenGra = TweenGraDic[target]; TweenGraDic[target] = new TweenGra(graphic, origin, destination, duration, originActive, destActive, curve, cg); return tweenGra; } else { tweenGra = new TweenGra(graphic, origin, destination, duration, originActive, destActive, curve, cg); TweenGraDic.Add(target, tweenGra); return tweenGra; } } public static TweenGra CreateTweenGra(Transform target, Color destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Graphic graphic = target.GetComponent(); TweenGra tweenGra; if (TweenGraDic.ContainsKey(target)) { tweenGra = TweenGraDic[target]; TweenGraDic[target] = new TweenGra(graphic, graphic.color, destination, duration, originActive, destActive, curve, cg); return tweenGra; } else { tweenGra = new TweenGra(graphic, graphic.color, destination, duration, originActive, destActive, curve, cg); TweenGraDic.Add(target, tweenGra); return tweenGra; } } public static TweenVec CreateTweenVec2D(Transform target, Vector3 origin, Vector3 destination, float duration, bool local, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenVec tweenVec2D; if (local) { origin.z = target.localPosition.z; destination.z = target.localPosition.z; } else { origin.z = target.position.z; destination.z = target.position.z; } if (TweenVecDic.ContainsKey(target)) { tweenVec2D = TweenVecDic[target]; TweenVecDic[target] = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); return tweenVec2D; } else { tweenVec2D = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); TweenVecDic.Add(target, tweenVec2D); return tweenVec2D; } } public static TweenVec CreateTweenVec2D(Transform target, Vector3 destination, float duration, bool local, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenVec tweenVec2D; Vector3 origin; if (local) { origin = target.localPosition; destination.z = target.localPosition.z; } else { origin = target.position; destination.z = target.position.z; } if (TweenVecDic.ContainsKey(target)) { tweenVec2D = TweenVecDic[target]; TweenVecDic[target] = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); return tweenVec2D; } else { tweenVec2D = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); TweenVecDic.Add(target, tweenVec2D); return tweenVec2D; } } public static TweenVec CreateTweenVecOffset2D(Transform target, Vector3 offset, float duration, bool local, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenVec tweenVec2D; Vector3 origin; Vector3 destination; if (local) { origin = target.localPosition; destination = target.localPosition + offset; destination.z = target.localPosition.z; } else { origin = target.position; destination = target.position + offset; destination.z = target.position.z; } if (TweenVecDic.ContainsKey(target)) { tweenVec2D = TweenVecDic[target]; TweenVecDic[target] = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); return tweenVec2D; } else { tweenVec2D = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); TweenVecDic.Add(target, tweenVec2D); return tweenVec2D; } } public static TweenVec CreateTweenVec3D(Transform target, Vector3 origin, Vector3 destination, float duration, bool local, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenVec tweenVec3D; if (TweenVecDic.ContainsKey(target)) { tweenVec3D = TweenVecDic[target]; TweenVecDic[target] = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); return tweenVec3D; } else { tweenVec3D = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); TweenVecDic.Add(target, tweenVec3D); return tweenVec3D; } } public static TweenVec CreateTweenVec3D(Transform target, Vector3 destination, float duration, bool local, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenVec tweenVec3D; Vector3 origin; if (local) { origin = target.localPosition; } else { origin = target.position; } if (TweenVecDic.ContainsKey(target)) { tweenVec3D = TweenVecDic[target]; TweenVecDic[target] = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); return tweenVec3D; } else { tweenVec3D = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); TweenVecDic.Add(target, tweenVec3D); return tweenVec3D; } } public static TweenVec CreateTweenVecOffset3D(Transform target, Vector3 offset, float duration, bool local, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenVec tweenVec3D; Vector3 origin; Vector3 destination; if (local) { origin = target.localPosition; destination = target.localPosition + offset; } else { origin = target.position; destination = target.position + offset; } if (TweenVecDic.ContainsKey(target)) { tweenVec3D = TweenVecDic[target]; TweenVecDic[target] = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); return tweenVec3D; } else { tweenVec3D = new TweenVec(target, origin, destination, duration, local, originActive, destActive, curve, cg); TweenVecDic.Add(target, tweenVec3D); return tweenVec3D; } } public static TweenFont CreateTweenFont(Transform target, int origin, int destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Text text = target.GetComponent(); TweenFont tweenFont; if (TweenRectDic.ContainsKey(target)) { tweenFont = TweenFontDic[target]; TweenFontDic[target] = new TweenFont(text, origin, destination, duration, originActive, destActive, curve, cg); return tweenFont; } else { tweenFont = new TweenFont(text, origin, destination, duration, originActive, destActive, curve, cg); TweenFontDic.Add(target, tweenFont); return tweenFont; } } public static TweenFont CreateTweenFont(Transform target, int destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Text text = target.GetComponent(); TweenFont tweenFont; if (TweenRectDic.ContainsKey(target)) { tweenFont = TweenFontDic[target]; TweenFontDic[target] = new TweenFont(text, text.fontSize, destination, duration, originActive, destActive, curve, cg); return tweenFont; } else { tweenFont = new TweenFont(text, text.fontSize, destination, duration, originActive, destActive, curve, cg); TweenFontDic.Add(target, tweenFont); return tweenFont; } } public static TweenRect CreateTweenRect(Transform target, Vector2 origin, Vector2 destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenRect tweenRect; RectTransform rectTra = target.GetComponent(); if (TweenRectDic.ContainsKey(target)) { tweenRect = TweenRectDic[target]; TweenRectDic[target] = new TweenRect(rectTra, origin, destination, duration, originActive, destActive, curve, cg); return tweenRect; } else { tweenRect = new TweenRect(rectTra, origin, destination, duration, originActive, destActive, curve, cg); TweenRectDic.Add(target, tweenRect); return tweenRect; } } public static TweenRect CreateTweenRect(Transform target, Vector2 destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenRect tweenRect; RectTransform rectTra = target.GetComponent(); if (TweenRectDic.ContainsKey(target)) { tweenRect = TweenRectDic[target]; TweenRectDic[target] = new TweenRect(rectTra, rectTra.rect.size, destination, duration, originActive, destActive, curve, cg); return tweenRect; } else { tweenRect = new TweenRect(rectTra, rectTra.rect.size, destination, duration, originActive, destActive, curve, cg); TweenRectDic.Add(target, tweenRect); return tweenRect; } } public static TweenScale CreateTweenScale(Transform target, Vector3 origin, Vector3 destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenScale tweenScale; if (TweenScaleDic.ContainsKey(target)) { tweenScale = TweenScaleDic[target]; TweenScaleDic[target] = new TweenScale(target, origin, destination, duration, originActive, destActive, curve, cg); return tweenScale; } else { tweenScale = new TweenScale(target, origin, destination, duration, originActive, destActive, curve, cg); TweenScaleDic.Add(target, tweenScale); return tweenScale; } } public static TweenScale CreateTweenScale(Transform target, Vector3 destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenScale tweenScale; if (TweenScaleDic.ContainsKey(target)) { tweenScale = TweenScaleDic[target]; TweenScaleDic[target] = new TweenScale(target, target.localScale, destination, duration, originActive, destActive, curve, cg); return tweenScale; } else { tweenScale = new TweenScale(target, target.localScale, destination, duration, originActive, destActive, curve, cg); TweenScaleDic.Add(target, tweenScale); return tweenScale; } } public static TweenAudio CreateTweenAudio(Transform target, float origin, float destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenAudio tweenAudio; AudioSource audio = target.GetComponent(); if (TweenAudioDic.ContainsKey(target)) { tweenAudio = TweenAudioDic[target]; TweenAudioDic[target] = new TweenAudio(audio, origin, destination, duration, originActive, destActive, curve, cg); return tweenAudio; } else { tweenAudio = new TweenAudio(audio, origin, destination, duration, originActive, destActive, curve, cg); TweenAudioDic.Add(target, tweenAudio); return tweenAudio; } } public static TweenAudio CreateTweenAudio(Transform target, float destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { TweenAudio tweenAudio; AudioSource audio = target.GetComponent(); if (TweenAudioDic.ContainsKey(target)) { tweenAudio = TweenAudioDic[target]; TweenAudioDic[target] = new TweenAudio(audio, audio.volume, destination, duration, originActive, destActive, curve, cg); return tweenAudio; } else { tweenAudio = new TweenAudio(audio, audio.volume, destination, duration, originActive, destActive, curve, cg); TweenAudioDic.Add(target, tweenAudio); return tweenAudio; } } public static TweenNumber CreateTweenNumber(Transform target, int origin, int destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Text text = target.GetComponent(); TweenNumber tweenNumber; if (TweenNumberDic.ContainsKey(target)) { tweenNumber = TweenNumberDic[target]; TweenNumberDic[target] = new TweenNumber(text, origin, destination, duration, originActive, destActive, curve, cg); return tweenNumber; } else { tweenNumber = new TweenNumber(text, origin, destination, duration, originActive, destActive, curve, cg); TweenNumberDic.Add(target, tweenNumber); return tweenNumber; } } public static TweenNumber CreateTweenNumber(Transform target, int destination, float duration, bool originActive, bool destActive, Curve curve, bool cg = false) { Text text = target.GetComponent(); TweenNumber tweenNumber; if (TweenNumberDic.ContainsKey(target)) { tweenNumber = TweenNumberDic[target]; TweenNumberDic[target] = new TweenNumber(text, int.Parse(text.text), destination, duration, originActive, destActive, curve, cg); return tweenNumber; } else { tweenNumber = new TweenNumber(text, int.Parse(text.text), destination, duration, originActive, destActive, curve, cg); TweenNumberDic.Add(target, tweenNumber); return tweenNumber; } } #endregion }