private void MakeAnimationCurves(GameObject root, AnimationClip animClip, Animation animation)
        {
            var acb = new AnimationCurveBuilder();

            //Set all gameobjects to inactive in first frame
            SetActiveRecursive(root.transform, false);
            root.SetActive(true);

            foreach(var mainlineKey in animation.MainlineKeys)
            {
                //Debug.Log(string.Format("Starting MainlineKey for {0} at {1} seconds", animation.Name, mainlineKey.Time));
                SetGameObjectForKey(root, animClip, mainlineKey);

                //Take a snapshot for our animation
                //AnimationMode.SampleAnimationClip(root, animClip, mainlineKey.Time);
                acb.SetCurveRecursive(root.transform, mainlineKey.Time);
            }

            acb.AddCurves(animClip);
        }
        public AnimationClip MakeAnimationClip(GameObject root, Animation animation)
        {
            //Clear local caches
            lastGameObjectCache.Clear();
            animationEvents.Clear();

            var animClip = new AnimationClip();
            animClip.name = animation.Name;

            //Set clip to Generic type
            AnimationUtility.SetAnimationType(animClip, ModelImporterAnimationType.Generic);

            //Populate the animation curves & events
            MakeAnimationCurves(root, animClip, animation);

            //Add events to the clip
            AnimationUtility.SetAnimationEvents(animClip, animationEvents.ToArray());

            return animClip;
        }