public static AnimationClip RequireClip(this Animation argAnimation, AnimationClip argMasterClip, string argClipName, int argStart, int argEnd, bool argAddLoopFrame, WrapMode wrapMode, int layer, float speed) { AnimationState state = argAnimation[argClipName]; if (state == null) argAnimation.AddClip(argMasterClip, argClipName, argStart, argEnd, argAddLoopFrame); state = argAnimation[argClipName]; state.speed = 1; state.wrapMode = wrapMode; state.layer = layer; return state.clip; }
public static void CrossFade(this Animation argAnimation, string argClipName, int argStart, int argEnd, bool argAddLoopFrame) { AnimationState state = argAnimation[argClipName]; if (state != null) { string animationName = argAnimation.UniqueName(argClipName); argAnimation.AddClip(state.clip, animationName, argStart, argEnd, argAddLoopFrame); argAnimation.CrossFade(animationName); } }
/// <summary> /// Play an animation clip. /// </summary> /// <param name="animation">Animation component instance.</param> /// <param name="clip">Clip to play. If not in animation then it will be added.</param> /// <param name="reverse">Should the animation be played in reverse?</param> /// <returns>Animation clip in seconds.</returns> public static float Play(this Animation animation, AnimationClip clip, bool reverse = false) { if (clip == null) return 0f; string clipName = clip.name; if (animation.GetClip(clipName) == null) { animation.AddClip(clip, clipName); } animation[clipName].normalizedSpeed = reverse ? -1f : 1f; animation[clipName].normalizedTime = reverse ? 1f : 0f; animation.Play(clipName); return clip.length; }