using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Events; namespace MyFrameworkPure { /// /// 动画工具类 /// public class AnimationTool { /// /// 正向播放动画 /// /// /// /// /// public static TimeDelay PlayForward(Animation animation, string clipName = "", UnityAction onComplete = null) { if (string.IsNullOrEmpty(clipName)) { clipName = animation.clip.name; } animation[clipName].speed = 1; animation[clipName].normalizedTime = 0; animation.Play(clipName); return TimeDelay.Delay(animation[clipName].length, () => { if (onComplete != null) onComplete(); }); } /// /// 倒播动画 /// /// /// /// /// public static TimeDelay PlayBack(Animation animation, string clipName = "", UnityAction onComplete = null) { if (string.IsNullOrEmpty(clipName)) { clipName = animation.clip.name; } animation[clipName].speed = -1; animation[clipName].normalizedTime = 1; animation.Play(clipName); return TimeDelay.Delay(animation[clipName].length, () => { if (onComplete != null) onComplete(); }); } /// /// 重置动画到第一帧 /// /// /// public static void Reset(Animation animation, string clipName = "") { if (string.IsNullOrEmpty(clipName)) clipName = animation.clip.name; animation.Play(clipName); animation[clipName].time = 0; animation.Sample(); animation.Stop(); } /// /// 重置动画到最后一帧 /// /// /// public static void Complete(Animation animation, string clipName = "") { if (string.IsNullOrEmpty(clipName)) clipName = animation.clip.name; animation[clipName].normalizedTime = 1; } /// /// 重置动画到最后一帧(Animator) /// /// /// public static void Complete(Animator animator, string clipName) { //AnimationClip clip = animator.runtimeAnimatorController.animationClips.First(x => x.name == clipName); animator.Play(clipName, 0, 1); } } }