private void RebuildTransition(AtomAnimationClip clip) { bool realign = false; var previous = clips.FirstOrDefault(c => c.nextAnimationName == clip.animationName); if (previous != null && (previous.IsDirty() || clip.IsDirty())) { clip.Paste(0f, previous.Copy(previous.animationLength, previous.GetAllCurveTargets().Cast <IAtomAnimationTarget>()), false); realign = true; } var next = GetClip(clip.nextAnimationName); if (next != null && (next.IsDirty() || clip.IsDirty())) { clip.Paste(clip.animationLength, next.Copy(0f, next.GetAllCurveTargets().Cast <IAtomAnimationTarget>()), false); realign = true; } if (realign) { foreach (var target in clip.targetControllers) { if (clip.ensureQuaternionContinuity) { UnitySpecific.EnsureQuaternionContinuityAndRecalculateSlope( target.rotX, target.rotY, target.rotZ, target.rotW); } } } }