// copy properties from key public override void CopyTo(AMKey key) { AMAnimationKey a = key as AMAnimationKey; a.enabled = false; a.frame = frame; a.wrapMode = wrapMode; a.amClip = amClip; a.crossfade = crossfade; }
// preview a frame in the scene view public override void previewFrame(AMITarget target, float frame, int frameRate, bool play, float playSpeed) { GameObject go = GetTarget(target) as GameObject; if (!go || keys.Count == 0) { return; } Animation anim = go.GetComponent <Animation>(); if (frame < keys[0].frame) { AMAnimationKey amKey = keys[0] as AMAnimationKey; if (amKey.amClip) { Utility.SampleAnimation(anim, amKey.amClip.name, amKey.wrapMode, amKey.crossfade ? 0.0f : 1.0f, 0.0f); } return; } for (int i = keys.Count - 1; i >= 0; i--) { if (keys[i].frame <= frame) { AMAnimationKey amKey = keys[i] as AMAnimationKey; if (amKey.amClip) { float t = (frame - (float)amKey.frame) / (float)frameRate; if (amKey.crossfade) { if (i > 0) { AMAnimationKey amPrevKey = keys[i - 1] as AMAnimationKey; if (amPrevKey.amClip) { float prevT = (frame - (float)amPrevKey.frame) / (float)frameRate; Utility.SampleAnimationCrossFade(anim, amKey.crossfadeTime, amPrevKey.amClip.name, amPrevKey.wrapMode, prevT, amKey.amClip.name, amKey.wrapMode, t); } } else { Utility.SampleAnimationFadeIn(anim, amKey.amClip.name, amKey.wrapMode, amKey.crossfadeTime, t); } } else { Utility.SampleAnimation(anim, amKey.amClip.name, amKey.wrapMode, 1.0f, t); } } break; } } }
// copy properties from key public override void CopyTo(AMKey key) { base.CopyTo(key); AMAnimationKey a = key as AMAnimationKey; a.wrapMode = wrapMode; a.amClip = amClip; a.crossfade = crossfade; a.crossfadeTime = crossfadeTime; }
// add a new key public void addKey(AMITarget itarget, OnAddKey addCall, int _frame, AnimationClip _clip, WrapMode _wrapMode) { foreach (AMAnimationKey key in keys) { // if key exists on frame, update key if (key.frame == _frame) { key.amClip = _clip; key.wrapMode = _wrapMode; // update cache updateCache(itarget); return; } } AMAnimationKey a = addCall(gameObject, typeof(AMAnimationKey)) as AMAnimationKey; a.frame = _frame; a.amClip = _clip; a.wrapMode = _wrapMode; // add a new key keys.Add(a); // update cache updateCache(itarget); }
public override void build(AMSequence seq, AMTrack track, int index, UnityEngine.Object target) { int frameRate = seq.take.frameRate; float waitTime = getWaitTime(frameRate, 0.0f); Animation anim = (target as GameObject).GetComponent <Animation>(); float duration = wrapMode == WrapMode.Once ? amClip.length : ((seq.take.getLastFrame() - frame) + 1) / (float)frameRate; if (crossfade) { if (index > 0) { AMAnimationKey prevKey = track.keys[index - 1] as AMAnimationKey; var prevAnimState = anim[prevKey.amClip.name]; var prevWrap = prevKey.wrapMode; var prevStartTime = prevKey.getWaitTime(frameRate, 0.0f); var animState = anim[amClip.name]; var tween = DOTween.To(new FloatPlugin(), () => 0f, (x) => { if (x < crossfadeTime) { float weight = x / crossfadeTime; prevAnimState.enabled = true; prevAnimState.wrapMode = prevWrap; prevAnimState.weight = 1.0f - weight; prevAnimState.time = (waitTime + x) - prevStartTime; animState.enabled = true; animState.wrapMode = wrapMode; animState.weight = weight; animState.time = x; anim.Sample(); prevAnimState.enabled = false; animState.enabled = false; } else { animState.enabled = true; animState.wrapMode = wrapMode; animState.weight = 1.0f; animState.time = x; anim.Sample(); animState.enabled = false; } }, duration, duration); seq.Insert(this, tween); } else { var animState = anim[amClip.name]; var tween = DOTween.To(new FloatPlugin(), () => 0f, (x) => { animState.enabled = true; animState.wrapMode = wrapMode; animState.time = x; if (x < crossfadeTime) { animState.weight = x / crossfadeTime; } else { animState.weight = 1.0f; } anim.Sample(); animState.enabled = false; }, duration, duration); seq.Insert(this, tween); } } else { var animState = anim[amClip.name]; var tween = DOTween.To(new FloatPlugin(), () => 0f, (x) => { animState.enabled = true; animState.wrapMode = wrapMode; animState.time = x; animState.weight = 1.0f; anim.Sample(); animState.enabled = false; }, duration, duration); seq.Insert(this, tween); } }