private AnimationClip CopyAndNeutralize(AnimationClip animationClipToBePreserved, HashSet <CurveKey> allApplicableCurveKeys, bool useExhaustiveAnimations) { var copyOfAnimationClip = new AnimationClip { name = "zAutogeneratedExp_" + animationClipToBePreserved.name + "_DO_NOT_EDIT" }; AnimationUtility.SetAnimationClipSettings(copyOfAnimationClip, AnimationUtility.GetAnimationClipSettings(animationClipToBePreserved)); var originalBindings = AnimationUtility.GetCurveBindings(animationClipToBePreserved); foreach (var binding in originalBindings) { var curveKey = CurveKey.FromBinding(binding); var canCopyCurve = _compilerConflictFxLayerMode == ConflictFxLayerMode.KeepBoth || !ShouldRemoveCurve(curveKey); if (canCopyCurve) { var curve = AnimationUtility.GetEditorCurve(animationClipToBePreserved, binding); if (!_doNotFixSingleKeyframes && curve.keys.Length == 1) { curve = new AnimationCurve(MakeSingleKeyframeIntoTwo(curve)); } AnimationUtility.SetEditorCurve(copyOfAnimationClip, binding, curve); } } if (useExhaustiveAnimations) { var thisAnimationPaths = originalBindings .Select(CurveKey.FromBinding) .ToList(); AddMissingCurveKeys(allApplicableCurveKeys, thisAnimationPaths, copyOfAnimationClip); } return(copyOfAnimationClip); }
private static Dictionary <CurveKey, float> ExtractFirstKeyframeValueOf(AnimationClip clip) { var curveKeyToFallbackValue = new Dictionary <CurveKey, float>(); foreach (var editorCurveBinding in AnimationUtility.GetCurveBindings(clip)) { var curve = AnimationUtility.GetEditorCurve(clip, editorCurveBinding); if (curve.keys.Length > 0) { curveKeyToFallbackValue.Add(CurveKey.FromBinding(editorCurveBinding), curve.keys[0].value); } } return(curveKeyToFallbackValue); }