private void SaveAnim(RecordAnimation recordAnim)
    {
        AnimatorController ac             = recordAnim.animator.runtimeAnimatorController as AnimatorController;
        string             controllerPath = AssetDatabase.GetAssetPath(ac);
        string             path           = Path.Combine(Path.GetDirectoryName(controllerPath), string.Format("{0}.asset", recordAnim.filename));
        var clip = new AnimationClip();
        //float lastTime = 0f;
        //int lastIndex = 0;

        var numTransforms = recordAnim.transformsToTrack.Length;


        for (int i = 0; i < numTransforms; i++)
        {
            Keyframe[,] keyframes = new Keyframe[recordAnim.recorded, 7];
            for (int j = 0; j < recordAnim.recorded; j++)
            {
                Quaternion rot = recordAnim.rotations[i][j];
                Vector3    pos = recordAnim.positions[i][j];

                float time = recordAnim.times[j];
                for (int n = 0; n < 3; n++)
                {
                    keyframes[j, n] = new Keyframe(time, pos[n]);
                }
                for (int n = 0; n < 4; n++)
                {
                    keyframes[j, 3 + n] = new Keyframe(time, rot[n]);
                }
            }

            clip.SetCurve(recordAnim.paths[i], typeof(Transform), "localPosition.x", new AnimationCurve(keyframes.GetCol(0)));
            clip.SetCurve(recordAnim.paths[i], typeof(Transform), "localPosition.y", new AnimationCurve(keyframes.GetCol(1)));
            clip.SetCurve(recordAnim.paths[i], typeof(Transform), "localPosition.z", new AnimationCurve(keyframes.GetCol(2)));

            clip.SetCurve(recordAnim.paths[i], typeof(Transform), "localRotation.x", new AnimationCurve(keyframes.GetCol(3)));
            clip.SetCurve(recordAnim.paths[i], typeof(Transform), "localRotation.y", new AnimationCurve(keyframes.GetCol(4)));
            clip.SetCurve(recordAnim.paths[i], typeof(Transform), "localRotation.z", new AnimationCurve(keyframes.GetCol(5)));
            clip.SetCurve(recordAnim.paths[i], typeof(Transform), "localRotation.w", new AnimationCurve(keyframes.GetCol(6)));
        }


        clip.EnsureQuaternionContinuity();
        var animPath = AssetDatabase.GenerateUniqueAssetPath(path);

        AssetDatabase.CreateAsset(clip, animPath);

        string stateName = Path.GetFileNameWithoutExtension(animPath);
        var    state     = ac.layers[0].stateMachine.AddState(stateName);

        state.motion = AssetDatabase.LoadAssetAtPath <AnimationClip>(animPath);
    }